Главная страница
Библиотека (скачать книги)
Скачать софт
Введение в программирование
Стандарты для C++
Уроки по C#
Уроки по Python
HTML
Веб-дизайн
Ассемблер в среде Windows
ActiveX
Javascript
Общее о Линукс
Линукс - подробно
Линукс - новое
Delphi
Паскаль для начинающих
Турбопаскаль
Новости
Партнеры
Наши предложения
Архив новостей
|
Теперь можно разработать приложение, использующее процедуру subtwo.
Воспользуемся для этого Мастером приложений С++ .NET. Создадим
MFC-приложение (Microsoft Foundation Classes — библиотека базовых классов
Microsoft) на основе диалогового окна. Позволим мастеру сконструировать
каркас приложения, после чего внесем некоторые изменения в проект.
Удалим все элементы управления с главной формы приложения. Затем поместим
на нашу форму, как и в приложении на Delphi, три элемента статического
текста Static Text, три ПОЛЯ редактирования Edit И КНОПКУ Button.
В нашем приложении придется оперировать с элементами управления как с
переменными. Для этого необходимо поставить в соответствие элементу
управления переменную того или иного типа. Например, если мы решили,
что элемент управления IDC_EDITI (первое поле редактирования Edit) будет
принимать в качестве ввода значение переменной целого типа и, то можно
связать элемент и переменную. В этом случае все программные манипуляции
с элементом управления будут сказываться на значении соответствующей переменной
и наоборот. Для синхронизации всех таких изменений служит
функция updateData. По аналогии свяжем элемент управления IDC_EDIT2
(второе поле Edit) с целочисленной переменной 12, а элемент управления
IDC_EDIT3 (третье поле Edit) — с целочисленной переменной iSubResuit.
В классе диалогового окна определим внешнюю функцию subtwo:
extern "С" int _stdcall subtwo(int il, int i2);
Спецификатор " С " защищает оригинальное имя функции от декорирования
(изменения). Если не указывать этот спецификатор, то компилятор
Visual С + + .NET изменит оригинальное имя функции при помощи дополнительных
символов, несущих информацию о типе каждого параметра.
Эта информация используется компоновщиком при создании исполняемого
файла. Далее напишем обработчик события при нажатии кнопки. Соответствующий
фрагмент кода приведен в листинге 3.23.
Листинг 3.23. Обработчик события при нажатии кнопки в программе на С++
void CSUBSTRACTIONTWOINTSINCNETDlg::OnBnClickedButtonl()
Функция updateData с параметром TRUE в обработчике нажатия кнопки
позволяет обновить значения переменных, соответствующих элементам
управления. Иными словами, эта функция передает текущее содержимое
элементов управления на экране в переменные, связанные с этими элементами
управления.
Далее, в переменную iSubResuit передается результат выполнения процедуры
subtwo. И, наконец, мы обновляем содержимое элементов управления в соответствии
со связанными с ними переменными. Это действие выполняет функция
UpdateData С аргументом FALSE.
Рассмотрим предыдущий пример, но с другими условиями передачи параметров.
В качестве параметров, передаваемых в вызываемую процедуру на
ассемблере, мы будем использовать не значения переменных, а их адреса.
Для операций с переменными, представленными адресами в памяти, используются
указатели. Указатель — это переменная, содержащая адрес, по
UpdateData(TRUE);
iSubResuit = subtwo(II, 12);
UpdateData(FALSE);
которому находится в памяти другая переменная. Указатели очень широко
применяются в языках высокого уровня. Например, работа со строками
данных и массивами в основном выполняется с использованием указателей.
Передача массивов и строк в качестве параметров в подпрограммы также
осуществляется при помощи указателей. Во многих случаях программисты
используют подпрограммы, возвращающие в качестве результата указатель,
т. е. адрес переменной.
Применение указателей значительно расширяет возможности обработки
данных в программе. Далее мы часто будем иметь дело с указателями, сейчас
же рассмотрим пример, где они применяются. Для начала изменим исходный
текст ассемблерной процедуры. Назовем нашу процедуру subtwop.
Исходный текст представлен в листинге 3.24.
Листинг 3.24. Ассемблерная процедура с использованием указателей
в качестве параметров
.386
.model flat
public subtwop
. data
subRes DD 0
. code
subtwop proc
push ESI
push EBP
mov EBP, ESP
mov ESI, DWORD PTR [EBP+12]
mov EAX, [ESI]
mov ESI, DWORD PTR [EBP+16]
sub EAX, [ESI]
mov subRes, EAX
mov EAX, offset subRes
pop EBP
pop ESI
ret 8
subtwop endp
end
<< Назад В начало Далее >> |
|