Вызов из библиотек процедур основной программы

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; просмотров: 980;


Поиск по сайту:

При помощи поиска вы сможете найти нужную вам информацию.

Поделитесь с друзьями:

Если вам перенёс пользу информационный материал, или помог в учебе – поделитесь этим сайтом с друзьями и знакомыми.
helpiks.org - Хелпикс.Орг - 2014-2024 год. Материал сайта представляется для ознакомительного и учебного использования. | Поддержка
Генерация страницы за: 0.005 сек.