Разработка DLL в Borland Delphi
Категория реферата: Рефераты по информатике, программированию
Теги реферата: сочинение сказка, предмет культурологии
Добавил(а) на сайт: Островерхов.
Предыдущая страница реферата | 1 2 3 4 5 6 7 8 9 10 11 | Следующая страница реферата
Импорт из DLL может проводиться по имени процедуры (функции), порядковому номеру или с присвоением другого имени.
В первом случае вы просто объявляете имя процедуры и библиотеку, из которой ее импортируете (мы это рассмотрели чуть выше). Импорт по порядковому номеру требует от вас указание этого самого номера:
procedure HelloWorld(AForm : TForm);
external myfirstdll.dll' index 15;
В этом случае имя, которое вы даете процедуре при импорте не обязательно должно совпадать с тем, которое было указано для нее в самой DLL. Т.е. приведенная выше запись означает, что вы импортируете из динамической библиотеки myfirstdll.dll процедуру, которая в ней экспортировалась пятнадцатой, и при этом в рамках вашего приложения этой процедуре дается имя SayHello.
Если вы по каким-то причинам не применяете описанный выше способ импорта, но тем не менее хотите изменить имя импортируемой функции (процедуры), то можно воспользоваться третьим методом:
procedure CoolProcedure;
external myfirstdll.dll' name DoSomethingReallyCool';
Здесь импортируемой процедуре CoolProcedure дается имя DoSomethingReallyCool. Вызов процедур и функций, импортируемых из динамически загружаемых библиотек несколько более сложен, чем рассмотренный нами выше способ. В данном случае требуется объявить указатель на функцию или процедуру, которую вы собираетесь использовать. Помните процедуру HelloWorld? Давайте посмотрим, что необходимо сделать для того, чтобы вызвать ее на выполнение в случае динамической загрузки DLL. Во-первых, вам необходимо объявить тип, который описывал бы эту процедуру:
type
THelloWorld = procedure(AForm : TForm);
Теперь вы должны загрузить динамическую библиотеку, с помощью GetProcAddress получить указатель на процедуру, вызвать эту процедуру на выполнение, и, наконец, выгрузить DLL из памяти. Ниже приведен код, демонстрирующий, как это можно сделать:
var
DLLInstance : THandle;
HelloWorld : THelloWorld;
begin
{ загружаем DLL }
DLLInstance := LoadLibrary(myfirstdll.dll');
{ получаем указатель }
@HelloWorld := GetProcAddress(DLLInstance, HelloWorld');
{ вызываем процедуру на выполнение }
HelloWorld(Self);
{ выгружаем DLL из оперативной памяти }
FreeLibrary(DLLInstance);
end;
Рекомендуем скачать другие рефераты по теме: реферат отрасль, рефераты бесплатно.
Предыдущая страница реферата | 1 2 3 4 5 6 7 8 9 10 11 | Следующая страница реферата