Вызов из библиотек процедур основной программы
6.1.Создайте новый проект динамической библиотеки. В основном модуле напишете код.
Код динамической библиотеки
library FuncProject;
uses
SysUtils,
Classes;
type
TCompProc = procedure (Str: PChar); StdCall;
procedure CorapS (Str: PChar; Proc: TCompProc); StdCall;
begin
if @ Proc <> nil then
TCompProc(Str);
end;
exports CompS index 10;
($ R *. res)
begin
end.
Новый тип (TCompProc) объявлен как процедура с одним параметром в виде переменной типа pchar, что имеет стандартный вызов. Объявления этого типа необходимо, чтобы объяснить динамической библиотеке, какого вида будет процедура в основной программе, которую надо будет вызывать.
Внимание
Тип PChar, это указатель на строку, которая заканчивается нулем (в шестнадцатиричной системе - # 0). Сама переменчивая типа Pchar - только указатель на начало строки, а конец строки определяется по наличию значения # 0.
После объявления нового типа процедуры идет процедура Comps, которая будет экспортироваться из модуля. Эту процедуру будем вызывать из основной программы, а из нее уже будем обращаться к процедуре основной программы.
В первой строке процедуры проверяется значение переданного параметра Proc. В этом параметре должны получать адрес той процедуры, который надо вызывать. Если параметр не равняется нулю, то можно сделать вызов. Для вызова написать следующий код:
TCompProc(Str)
Этим кодом вызывается процедура и ей как параметр передается переменчивая str, которую получили в качестве входного параметра. В принципе, с процедурой все.
6.2. Создайть новое дополнение. В разделе type объявить следующее:
type
TCompProc = procedure (Str: PChar); StdCall;
procedure CompS (Str: PChar; ProcrTCompProc) / export; StdCall;
В первой строке объявляется тот же процедурный тип, что и в динамической библиотеке. Во второй строке объявляется процедура, которую экспортируем из библиотеки. Объявление должно быть именно в таком порядке. Если вы попробуете объявить сначала процедуру из библиотеки, то при компиляции Delphi выдаст ошибку, потому что в качестве второго параметра в процедуре стоит тип TCompProc и сначала его нужно описать, а потом использовать.
6.3. Написать процедуру caiiFromDLL. Эта процедура будет вызываться из динамической библиотеки. Она будет выглядеть так:
procedure CaiiFromDLL (Str: PChar); StdCall;
begin
ShowMessage ( 'DLL вызывала эту процедуру. Параметр равняется:' + Str);
end;
Процедура должна отвечать объявленному типу TCompProc, а именно, в типе описано, что это процедура и она имеет один параметр типа Pchar и вызывается стандартно. Процедура должна отвечать всего этого описания, иначе случится ошибка.
Внутри процедуры вызывается только одна функция ShowMessage, которая формирует на экране окно сообщения. Как единственный параметра в ней нужно указать текст сообщения.
6.4. Поместить на форму кнопку и за ее события Onclick написать следующий код:
procedure TForml.ButtonlClick (Sender: TObject);
begin
CompS ( 'Hello ', SCallFromDLL);
end;
Здесь просто вызывается процедура CompS, которая проверить результат работы программы.
Дата добавления: 2016-02-27; просмотров: 1055;