Содержание материала

Здесь импортируемой процедуре CoolProcedure дается имя DoSomethingReallyCool.

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

несколько более сложен, чем рассмотренный нами выше способ. В данном случае требуется объявить

указатель на функцию или процедуру, которую вы собираетесь использовать.

Помните процедуру HelloWorld? Давайте посмотрим, что необходимо сделать для того,

чтобы вызвать ее на выполнение в случае динамической загрузки DLL. Во-первых, вам

необходимо объявить тип, который описывал бы эту процедуру:

 

type

THelloWorld = procedure(AForm : TForm);

 

Теперь вы должны загрузить динамическую библиотеку, с помощью GetProcAddress получить

указатель на процедуру, вызвать эту процедуру на выполнение, и, наконец, выгрузить DLL из памяти.

Ниже приведен код, демонстрирующий, как это можно сделать:

Code:

var

DLLInstance : THandle;

HelloWorld : THelloWorld;

begin

{ загружаем DLL }

DLLInstance := LoadLibrary('myfirstdll.dll');

{ получаем указатель }

@HelloWorld := GetProcAddress(DLLInstance, 'HelloWorld');

{ вызываем процедуру на выполнение }

HelloWorld(Self);

{ выгружаем DLL из оперативной памяти }

FreeLibrary(DLLInstance);

end;

  

Как уже говорилось выше, одним из недостатков статической загрузки DLL является невозможность

продолжения работы приложения при отсутствии одной или нескольких библиотек. В случае с динамической

загрузкой у вас появляется возможность программно обрабатывать такие ситуации и не допускать, чтобы программа

вываливалась» самостоятельно. По возвращаемому функциями LoadLibrary и GetProcAddress значениям можно

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

Добавить комментарий

Не использовать не нормативную лексику.

Просьба писать ваши замечания, наблюдения и все остальное,
что поможет улучшить предоставляемую информацию на этом сайте.

ВСЕ КОММЕНТАРИИ МОДЕРИРУЮТСЯ ВРУЧНУЮ, ТАК ЧТО СПАМИТЬ БЕСПОЛЕЗНО!


Защитный код
Обновить