Главная страница
Библиотека (скачать книги)
Скачать софт
Введение в программирование
Стандарты для C++
Уроки по C#
Уроки по Python
HTML
Веб-дизайн
Ассемблер в среде Windows
ActiveX
Javascript
Общее о Линукс
Линукс - подробно
Линукс - новое
Delphi
Паскаль для начинающих
Турбопаскаль
Новости
Партнеры
Наши предложения
Архив новостей
|
Для вывода текста строки в окно приложения мы используем контекст устройства
и связанную с ним функцию TextOut. Процедуре rets в качестве параметра
передается адрес строки P I . Строка типа pchar может быть представлена в виде
массива символов, поэтому запись rets ( PI ) является корректной.
Теперь разработаем вариант основной программы для компиляции в Visual
С++ .NET. Вначале внесем некоторые изменения в исходный текст ассемблерного
модуля из предыдущего примера. Изменения касаются в основном
имени процедуры. С учетом сделанных изменений программный код приведен
в листинге 3.45.
Листинг 3.45. Ассемблерная процедура, выполняющая копирование строки
в буфер памяти основной программы на С++
. 3 8 6
.model flat
public _rets@4
.data
TESTSTR DB "TEST STRING FROM ASM PROC !",0
LENSTR EQU $-TESTSTR
.code
_rets@4 proc
push ESI
push EDI
push EBP
mov EBP, ESP
eld
mov ECX, LENSTR
mov ESI, offset TESTSTR
mov EDI, DWORD PTR [EBP+16]
rep movsb
pop EBP
pop EDI
pop ESI
ret 4
_rets@4 endp
end
Наша процедура скопирует строку TESTSTR В область памяти, адрес которой
передается из вызывающей программы в качестве параметра. Здесь используется
команда movsb, которая скопирует LENSTR число байт из строки
TESTSTR, заданной своим смещением в регистре E S I , В строку, заданную
смещением в регистре E D I .
Для разработки основной программы воспользуемся Мастером приложений
Visual Studio .NET. Выберем диалоговый тип приложения. Разместим на
главной форме приложения кнопку Button. Чтобы вывести результирующую
строку в окно приложения, воспользуемся обработчиком нажатия
кнопки Button. Непосредственный вывод строки выполняет функция
TextOut.
Для отображения строки воспользуемся контекстом устройства отображения.
Но вначале определим этот объект в обработчике нажатия кнопки:
CClientDC dc(this);
Структура RECT определяет, как и в приложении на Delphi, координаты
клиентской области окна приложения. Чтобы получить текущие координаты, воспользуемся функцией GetciientRect (&rect). Кроме того, необходимо получить саму строку из ассемблерной процедуры и поместить ее в буфер
buf. Это действие выполнит оператор rets (buf).
Полностью исходный текст обработчика нажатия кнопки приведен в листинге
3.46.
Листинг 3.46. Обработчик нажания кнопки в приложении на С++
void CRetunStringFromProcDlg::OnBnClickedButtonl()
{
// TODO: Add your control notification handler code here
char buf[32];
rets(buf);
CClientDC dc(this);
RECT rect;
GetciientRect(&rect);
dc.TextOut((rect.right - rect.left)/5,
(rect.bottom - rect.top)/ 2,
buf) ;
}
<< Назад В начало Далее >> |
|