Не могу разобраться, как проиходит возврат результата из процедуры в динамической бибилиотеке.
У меня в программе вызов библиотеки происходит успешно, вызов процедуры происходит успешно, занчение в процедуру передается, а вот получить данные из нее не выходит (возникает access violation at...).
Вот код библиотеки:
Код:
Код: Выделить всё
library mydll;
uses
System.SysUtils,
System.Classes;
{$R *.res}
procedure showing(var s:string); stdcall;
begin
s:=s+'Procedure';
writeln(s);
end;
exports showing index 1 ;
begin
end.Вот код вызывающей программы:
Код:
Код: Выделить всё
uses
System.SysUtils, Winapi.Windows, Winapi.Messages;
type
trever=procedure (var s:string); stdcall;
var
rever:trever;
libhandle:THandle;
str,str2:string;
begin
str:='Stroka ';
@rever:=nil;
Libhandle:=LoadLibrary('mydll.dll');
if libhandle>=32 then
begin
writeln('Library is load');
@rever:=Getprocaddress(libhandle,pchar(longint(1)));
end;
if @revernil then
begin
writeln('Function procedure is load');
rever(str);
end;
freelibrary(libhandle);
writeln(str);
readln;
end.