我试了试在DLL中FREEMEM指针后函数返回的数据是错误的,不能正确返回。
下面是DLL中的函数
-----------------------------------------------------------
function EditionTo_55(var idhao:integer)
ointer;export;far;
var
c_shuju:array of byte;
begin
try
GetMem(c_shuju,4);
c_shuju[0]:=188;
c_shuju[1]:=250;
c_shuju[2]:=idhao;
c_shuju[3]:=55;
result := @c_shuju[0];
//Freemem(c_shuju,4);
except
result := nil;
end;
end;
EXE中的调用。
-------------------------------------------------
procedure TForm1.Button1Click(Sender: TObject);
var
H_TOP:HWND;
EditionTo_55:TEditionTo_55;
hh
ointer;
idhao:integer;
Bshuju:array of byte;
begin
Bshuju:=nil;
idhao:=2;
H_TOP:=LoadLibrary(pchar('publicdll.dll'));
EditionTo_55:=GetProcaddress(H_TOP,'EditionTo_55');
hh:=EditionTo_55(idhao);
setlength(Bshuju,sizeof(hh));
Move(hh^,PChar(@Bshuju[0])^,sizeof(hh));
hh:=nil;
Freemem(hh);
Freelibrary(H_TOP);
end;
-------------------------
我是用动态方法调用的。请高手指点指点。