Обучающие курсы:

Обучение профессии "Разработчик C#" + стажировка в Mail.ru
Обучение профессии "Разработчик Python" + трудоустройство
Обучение профессии "Веб-разработчик" + стажировка в Mail.ru


Главная страница
Библиотека (скачать книги)
Скачать софт
Введение в программирование
Стандарты для 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


 
 
 

Библиотека программиста. 2009.
Администратор: admin@programmer-lib.ru