сті викликати метод об'єкта слід враховувати, що даний метод об'єкта характеризується двома адресами - адресою методу й адресою даних. Отже, необхідно передавати два покажчика. Але замість передачі двох покажчиків можна скористатися структурою TMethod, визначеної в модулі SysUtils.pas:
type = record, Data: Pointer;
end;
Код в додатку для наведеного вище прикладу виглядає так:
type = function: integer of object; stdcall;
CalculateSumObject (Method: TMethod): integer; stdcall; 'FirstLib.dll' name 'SumObject';
TForm1.GetNextValueObject: integer; stdcall; NSum <10 then begin (NSum);: = NSum; else Result: = -1;;
TForm1.Button10Click (Sender: TObject);: TGetNextValueObject;: = 0;: = GetNextValueObject;: = IntToStr (CalculateSumObject (TMethod (FGetNext)));
end;
Код в DLL, який здійснює виклик методу об'єкта, виглядає наступним чином:
type = function: integer of object; stdcall;
CalculateSumObject (Method: TMethod): integer; stdcall; export;: integer;: TReturnNextMethodObject;: = 0;: = 0;: = TReturnNextMethodObject (Method); N> = 0 do begin: = ReturnNext; N> = 0 then Result: = Result + N;
end;;
Слід враховувати, що методи об'єкта є залежними від мови, тобто в різних мовах програмування генеруються різні способи передачі даних в метод об'єкта. Тому даний приклад слід використовувати тільки у випадку, якщо і додаток, і DLL написані на Delphi (або на одному і тому ж мовою програмування). p align="justify"> І нарешті, сам додаток може експонувати методи таким же способом, що і DLL. У додатку можна створити секцію exports і оголосити імена (та/або індекси) методів. Після цього в DLL можна скористатися методом GetProcAddress для отримання покажчика на метод і викликати його. Для описаного вище прикладу код додатку буде такою:
function GetNextValueExport: integer; stdcall; export;
begin NSum <10 then begin (NSum);: = NSum; else Result: = -1;;
CalculateSumExport (HInstance: integer; MethodName: pchar): integer; stdcall; 'FirstLib.dll' name 'SumExport';
TForm1.Button11Click (Sender: TObject);: integer;: = 0;: = CalculateSumExport (HInstance, 'GetNextValueExport');: = IntToStr (N);;
{!! The section is announced in Application!!} Index 1 name 'GetNextValueExport';
Тепер в додатку (у проекті, де буде генеруватися *. exe-файл [U2] [NE3]) визначена секція exports! Відповідний код в DLL для тестування даного методу виглядає наступним чином:
type = function: integer; stdcall;