Студопедия.Орг Главная | Случайная страница | Контакты | Мы поможем в написании вашей работы!  
 

begin end



Первое, что здесь бросается в глаза – объявление в разделе type нового типа – TCompProc. Новый тип объявлен как процедура с одним параметром в виде переменной типа PChar и имеющей стандартный вызов. Объявление этого типа необходимо, чтобы объяснить динамической библиотеке, какого вида будет процедура в основной программе, которую надо будет вызывать.

Напоминаю, что тип PChar – это указатель на строку оканчивающуюся нулём (шестнадцатеричный #0). Сама переменная типа PChar, это только указатель на начало строки, а конец строки определяется по наличию значения #0. Но о конце строки нам никогда не придётся заботиться, нас больше будет волновать выделенная память, потому что под строку типа PChar нужно резервировать память.

Но всё это небольшое отступление и напоминание уже пройдённого материала, так что продолжим рассматривать наш модуль. После объявление нового типа процедуры идёт процедура CompS, которая будет экспортироваться из модуля. Эту процедуру мы будем вызывать из основной программы, а из неё уже будем обращаться к процедуре основной программы.

В первой строке процедуры я проверяю значение переданного параметра Proc. В этом параметре мы должны получать адрес процедуры, которую надо вызвать. Если параметр не равен нулю, то можно вызывать процедуру. Для вызова я пишу следующий код: TCompProc(Proc)(Str). Этим кодом я вызываю процедуру и передаю ей в качестве параметра переменную Str, которую мы сами же получили в качестве входного параметра.

В принципе, с процедурой всё. Остальное тебе уже должно быть знакомо. Переходим к написанию основного модуля.

Создай новое приложение. В разделе type сразу же объяви следующее:

Type

TCompProc= procedure(Str:PChar);StdCall;
procedure CompS(Str:PChar; Proc:TCompProc);export;StdCall;

В первой строке я объявляю тот же процедурный тип, что и в динамической библиотеке. Во второй строке объявляется процедура, которую мы экспортируем из библиотеки. Объявление должно быть именно в таком порядке. Если ты попытаешься объявить сначала процедуру из библиотеки, то при компиляции Delphi выдаст ошибку, потому что в качестве второго параметра в процедуре стоит тип TCompProc и сначала его нужно описать, а потом использовать.

Теперь напишем процедуру CallFromDLL. Эта процедура будет вызываться из динамической библиотеки. Она будет выглядеть так:

procedure CallFromDLL(Str:PChar);StdCall; begin ShowMessage('DLL вызвала эту процедуру. Параметр равен: '+Str); end;

Наша процедура должна соответствовать объявленному типу TCompProc, а именно, в типе описано, что это процедура, что она имеет один параметр типа PChar и вызывается стандартно. Процедура должна соответствовать всему этому описанию, иначе произойдёт ошибка.

Внутри процедуры я вызываю только одну функцию ShowMessage, которая показывает на экран окно сообщения. В качестве единственного параметра нужно указать текст сообщения.

Теперь пометим на форму кнопку и по её нажатию напишем следующий код:

procedure TForm1.Button1Click(Sender: TObject); begin CompS('Привет', @CallFromDLL); end;

Здесь я просто вызываю процедуру CompS, хранящуюся в динамической библиотеки. Попробуй запустить приложение и проверить результат работы программы.

На компакт диске, в директории \Примеры\Глава 18\Call ты можеш ь увидет ь пример это й программы.





Дата публикования: 2014-11-28; Прочитано: 186 | Нарушение авторского права страницы | Мы поможем в написании вашей работы!



studopedia.org - Студопедия.Орг - 2014-2024 год. Студопедия не является автором материалов, которые размещены. Но предоставляет возможность бесплатного использования (0.006 с)...