отрапляє в додаток і після показу користувачеві повідомлення додаток спробує його зруйнувати. В результаті знову відбудеться виняток. Тому всі експоновані в DLL методи, в яких можуть відбутися виключення, повинні мати пастку винятки:
Типовий обмін текстовою інформацією з DLL виглядає наступним чином. Якщо необхідно передати небудь рядок в метод DLL, то можна просто використовувати в методі покажчик на рядок:
procedure SendString (P: pchar); stdcall; external 'FirstLib.dll' name 'SendString';
TForm1.Button5Click (Sender: TObject);: string;: = 'This test string will be sended to DLL'; (pchar (S));;
Метод SendString в DLL реалізований таким чином:
SendString (P: pchar); stdcall; export;: string;: = StrPas (P);
ShowMessage (S);;
При запуску даного прикладу з'явиться повідомлення, яке показує вміст рядка, створеної в *. exe-модулі. Для того щоб отримати текстову інформацію з DLL, у додатку зазвичай створюється буфер, який заповнюється в DLL. Природно, розмір буфера повинен бути достатнім для зберігання всієї текстової інформації. Щоб убезпечити буфер від переповнення, разом з буфером як параметр найчастіше надсилається його розмір. br/>
Виклик методів додатки в DLL
Раніше ми розглядали тільки такі варіанти, коли методи DLL викликаються з програми. Але часто потрібно, щоб DLL викликала методи додатки, наприклад для нотифікаційні повідомлень. p align="justify"> Якщо необхідно викликати з програми метод, який при цьому не є методом класу, то досить передати покажчик на метод в DLL:
var: integer = 0;
CalculateSum (ReturnCallback: pointer): integer; stdcall; 'FirstLib.dll' name 'Sum';
GetNextValue: integer; stdcall; NSum <200 then begin (NSum);: = NSum; else Result: = -1;;
TForm1.Button9Click (Sender: TObject);: = IntToStr (CalculateSum (@ GetNextValue));
end;
У додатку створюється метод (не метод класу!), адреса якого передається в DLL. Для того щоб цей метод можна було викликати з DLL, створених на інших мовах програмування, бажано використовувати угоду stdcall виклику при реалізації зазначених методів (так звані callback-методи). Використання виклику методу в DLL можна проілюструвати на такому прикладі:
type = function: integer; stdcall;
CalculateSum (ReturnCallback: pointer): integer; stdcall; export;: integer;: TReturnNextMethod;: = 0; ReturnCallback = nil then Exit;: = 0;: = TReturnNextMethod (ReturnCallback); N> = 0 do begin: = ReturnNext; N> = 0 then Result: = Result + N;
end;;
При необхідно...