Главная страница
Библиотека (скачать книги)
Скачать софт
Введение в программирование
Стандарты для C++
Уроки по C#
Уроки по Python
HTML
Веб-дизайн
Ассемблер в среде Windows
ActiveX
Javascript
Общее о Линукс
Линукс - подробно
Линукс - новое
Delphi
Паскаль для начинающих
Турбопаскаль
Новости
Партнеры
Наши предложения
Архив новостей
|
Должен заметить, что имя файла объектного модуля может и не совпадать с
именем вызываемой процедуры или функции. Необязательно также, чтобы
модуль subtwo.obj содержал процедуру subtwo с тем же именем. Более того,
объектный модуль может содержать несколько процедур или функций.
Следующей строкой можно объявить вызываемую процедуру:
function subtwo(il: Integer; i2: Integer): Integer; stdcaii; external;
Директива external указывает на то, что вызываемая процедура является
внешней по отношению к вызывающей программе и находится в другом,
возможно внешнем модуле. Директива stdcaii указывает компилятору правила,
по которым параметры il и i2 обрабатываются в вызываемой процедуре.
Далее напишем обработчик нажатия кнопки (листинг 3.21).
Листинг 3.21. Обработчик нажатия кнопки
procedure TForml.ButtonlClick(Sender: TObject);
var
II, 12: Integer;
begin
11 := StrToInt(IlEdit.Text);
12 := StrToInt(l2Edit.Text);
subResult.Text := IntToStr(subtwo(II, 12));
end;
Обработчик представляет собой обычную процедуру, в которой мы объявили
две переменные целого типа п и 12 и написали несколько операторов.
Введенные в поля редактирования текстовые представления и и 12 преобразуются
в целые числа при помощи функции StrToInt:
11 := StrToInt(IlEdit.Text);
12 := StrToInt(l2Edit.Text) ;
Далее программа отображает результат вычитания в поле редактирования
subResuit при помощи оператора:
subResult.Text := IntToStr((subtwo(II, 12)));
Здесь целочисленный результат, возвращаемый процедурой subtwo, преобразуется
в текст функцией IntToStr и отображается в поле редактирования.
Как вы заметили, процедура subtwo использует в качестве параметров двойные
слова (DWORD) и возвращает результат также, в виде двойного слова.
Компилятор Delphi корректно преобразует целочисленные величины типа
integer в двойные слова, поэтому ошибок не возникает. Мы могли бы, к
примеру, в секции определения переменных нашей программы написать:
var
I I , 12: DWORD;
Функции strToint и intTostr в этом случае отрабатывают корректно.
Нужно быть очень внимательным при преобразовании типов, т. к. ошибки
преобразования очень трудно поддаются анализу и не всегда отслеживаются
компиляторами! Это касается как приложений на Delphi, так и на Visual
С++ .NET.
И еще одно. Не забудьте скопировать файл subtwo.obj в рабочий каталог
нашего проекта, иначе компоновщик не сможет найти объектный файл с
нашей процедурой.
Рассмотрим этот же пример, но в реализации Microsoft Visual С++ .NET
(листинг 3.22). Первое, что мы сделаем — это изменим идентификаторы
имен в нашей ассемблерной процедуре.
Листинг 3.22. Ассемблерная процедура, вычисляющая разность
двух целых чисел, для использования в С++
.386
.model flat
public _subtwo@8
.data
code
subtwo@8 proc
push EBP
mov EBP, ESP
mov EAX, DWORD PTR [EBP+8]
sub EAX, DWORD PTR [EBP+12]
pop EBP
ret 8
subtwo@8 endp
end
Имя процедуры subtwo изменилось на _subtwo@8 в соответствии с соглашением
stdcaii для работы с компилятором С + + .NET. Скомпилируем наш
ассемблерный модуль:
ml /с /Fo subtwo.obj subtwo.asm
<< Назад В начало Далее >> |
|