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

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


Главная страница
Библиотека (скачать книги)
Скачать софт
Введение в программирование
Стандарты для C++
Уроки по C#
Уроки по Python
HTML
Веб-дизайн
Ассемблер в среде Windows
ActiveX
Javascript
Общее о Линукс
Линукс - подробно
Линукс - новое
Delphi
Паскаль для начинающих
Турбопаскаль
Новости
Партнеры
Наши предложения
Архив новостей





Приложение, вызывающее процедуру maxint, разработаем вначале в среде Delphi 7. На главной форме приложения разместим визуальные компоненты: два поля редактирования Edit, две метки статического текста Label и кнопку Button. Напишем два обработчика событий — нажатие кнопки и инициализация в момент, когда главное окно приложения становится активным. В секции var исходного модуля определим переменные, с которыми будем работать. Зададим массив и из 12-ти целых чисел, его размер как целое число S I I , целочисленную переменную мах, в которую поместим результат выполнения процедуры maxint, и, наконец, указатель рмах целочисленного типа.

Кроме того, не забудем поместить в секцию implementation описание нашей внешней процедуры. Исходный текст модуля приложения показан в листинге 3.30, он содержит все обработчики и декларации, о которых только что было упомянуто.
Листинг 3.30. Программа на Delphi, вызывающая ассемблерную процедуру
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls;
type
TForml = class(TForm)
Buttonl: TButton;
Editl: TEdit;
Edit2: TEdit;
Labell: TLabel;
Label2: TLabel;
procedure ButtonlClick(Sender: TObject);
procedure FormCreate(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Forml: TForml;
II: array [1..12] of Integer
SIl: Integer;
pMax: PInteger;
Max: Integer;
implementation
{$R *.dfm}
{$L maxint.obj}
function maxint(PI1: PInteger; SIl: Integer):PInteger; stdcaii; external;
= (585, 1751, -27, -76, 312, 93,
5, -1, 57, 22, -5, 997);

Обработчик нажатия кнопки
procedure TForml.ButtonlClick(Sender: TObj ect);
begin
pMax := maxint(Addr(II), SII);
Max := рМахл;
Edit2.Text := IntToStr(Max);
end;

Действия по инициализации приложения
procedure TForml.FormCreate(Sender: TObj ect);
var
Cnt: Integer;
begin
SI1 := SizeOf(II) div 4;
for Cnt := 1 to SI1 do
Edit1.Text := Edit1.Text + ' • + IntToStr(Il[Cnt]);
end;
end.

Еще несколько слов об обработчиках событий. Обработчик FormCreate записывает в переменную s i i размер массива и. Поскольку размер массива возвращается в байтах, необходимо привести это значение к размерности двойного слова, для чего следует разделить полученный размер массива на 4. Именно это и сделано в операторе:
SII := SizeOf(II) div 4;
Далее в цикле for происходит вывод значений элементов массива в поле редактирования Editi.
Обработчик нажатия кнопки присваивает указателю рмах результат, возвращаемый процедурой maxint. Обратите внимание, что первым аргументом является адрес массива и. Для получения адреса массива используется оператор взятия адреса Addr. Этот оператор является аналогом оператора поэтому вместо выражения:
pMax := maxint(Addr(II), SII); можно написать:
pMax := maxint(011, SII);

Далее выполняется операция разыменования указателя, и в переменную мах заносится значение переменной, находящейся по адресу рмах.
И последнее, что остается сделать в обработчике кнопки — вывести результат в поле редактирования Edit2:
Edit2.Text := IntToStr(Max);


 
 
 

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