OpenGL в Delphi

       

"Все права зарезервированы"




Подкаталог Ех02 содержит соответствующий проект. Логотип автора приложения представляет собой стилизацию логотипа библиотеки OpenGL. Чтобы впоследствии поместить окно в динамическую библиотеку, в разделе interface модуля формы окна "Об авторах" я поместил следующую строку с forward-описанием процедуры:

procedure AboutForm; stdcall; export;

Код процедуры, это уже в разделе implementation модуля unitl.pas, совсем простой - создание и отображение окна:

procedure AboutForm; stdcall; export;
begin
Forml := TForml.Create ( Application);
Forml.ShowModal;
end;

Итак, модуль unitl.pas содержит описание экспортируемой функции AboutForm, связанной с отображением окна "Об авторах".
Проект About.dpr из подкаталога Ех02 предназначен для компоновки файла динамической библиотеки About.dll:

library About; uses
Unitl in 'Unitl.pas'; exports
AboutForm; // функция, размещаемая в DLL
begin
end.

Откомпилируйте этот проект, выбрав соответствующий пункт меню среды Delphi или нажав комбинацию клавиш <Ctrl>+<F9>.

Замечание
Обращаю ваше внимание, что запускать проекты с заголовком library бессмысленно, невозможно "запустить" динамическую библиотеку.

После компиляции получается файл About.dll, который необходимо переместить в каталог приложения, использующего эту библиотеку, то есть туда же, где располагается модуль ARM.exe. Головной модуль при выборе пользователем пункта меню "Об авторах" обращается к процедуре AboutForm, загружаемой из библиотеки. Если при загрузке функции происходит ошибка, исключительная ситуация, приложение ее снимает. Я оставляю пользователя в неведении по поводу произошедшей аварии в силу ее малозначительности.
В модуле About.pas головного проекта содержится описание соответствующих типов и процедуры:

type
TAboutForm = procedure stdcall; // тип загружаемой из dll процедуры
var
AboutForm : TAboutForm; // переменная процедурного типа
procedure About; // вспомогательная процедура
begin
try
t // режим защиты от ошибок
hCDll := LoadLibrary ('About'); // ссылка на соответствующую библиотеку
If hCDll <= HINSTANCE_ERROR then begin // ошибка загрузки dll
hCDll := NULL; // освобождаем память
Exit // остальные действия не делать
end else // пытаемся получить адрес процедуры в dll
AboutForm := GetProcAddress(hCDll, 'AboutForm');
If not Assigned (AboutForm)
then Exit // ошибка, dll не содержит такую процедуру
else AboutForm; // все в порядке, запускаем процедуру из dll
If not hCDll = NULL then
begin
FreeLibrary (hCDll); // освобождение памяти
hCdll := NULL;
end;
except Exit // в случае ошибки снять аварийную ситуацию и закончить
end; // try
end;

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



Содержание раздела