24.11.2014 Views

Программирование на С++ - eDrive

Программирование на С++ - eDrive

Программирование на С++ - eDrive

SHOW MORE
SHOW LESS

Create successful ePaper yourself

Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.

17<br />

подготовленным приложением, <strong>на</strong>пример, как myDLLLIB2.cpp,<br />

myDLLLIB2.bpr. Создать, далее, файл заголовка с объявлением требуемой<br />

функции, <strong>на</strong>пример:<br />

extern "C" void __declspec (dllexport) MyAbout (char *s);<br />

Сохранить этот файл (<strong>на</strong>пример, myDLLLIB2.h), включить его в проект и<br />

подключить к модулю библиотеки. Подготовить, также, форму «О программе»<br />

(File.New.Form) с рисунком-логотипом и тремя <strong>на</strong>дписями. Две<br />

<strong>на</strong>дписи оставить пустыми для <strong>на</strong>звания работы и даты, а третью заполнить<br />

сведениями об авторе. Сохранить форму (<strong>на</strong>пример, под именем<br />

myDLLForm.cpp), включить ее в проект и подключить к модулю библиотеки.<br />

В файле кода модуля определить объявленную функцию, <strong>на</strong>пример:<br />

void MyAbout (char *s)<br />

{ Form1 = new TForm1 (0);<br />

Form1–>Label1–>Caption = s;<br />

Form1–>Label2–>Caption = DateToStr (Date ());<br />

Form1–>ShowModal ();<br />

delete Form1; }<br />

Скомпоновать проект и убедиться, что в папке проекта сформировались<br />

файлы библиотеки LIB и DLL.<br />

4. Ди<strong>на</strong>мическая компоновка. В форму подготовленного приложения добавить<br />

кнопку «О программе» и кодировать ее обработчик:<br />

void __fastcall TForm1::Button3Click (TObject *Sender)<br />

{ HINSTANCE dllp = LoadLibrary (“myDLLLIB2.dll”);<br />

if (dllp)<br />

{ void (__stdcall *p) (char *s);<br />

p = (void (__stdcall *) (char *)) GetProcAddress (dllp, “_MyAbout”);<br />

if (p) p (“Библиотеки LIB и DLL”);<br />

else ShowMessage (“Нет функции MyAbout”);<br />

FreeLibrary (dllp); }<br />

else ShowMessage (“Нет файла myDLLLIB2.dll”); }<br />

Здесь функция LoadLibrary возвращает указатель <strong>на</strong> переменную типа HInstance<br />

из библиотеки Windows API и загружает файл DLL. Функция Get-<br />

ProcAddress присваивает з<strong>на</strong>чение указателя функции DLL. Затем вызывается<br />

рабочая функция и библиотека выгружается из памяти функцией<br />

FreeLibrary. В заключение испытать приложение c библиотеками.

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!