16,748
社区成员
发帖
与我相关
我的任务
分享
library TestDll;
uses
System.SysUtils,
System.Classes;
function Test(Instr1,Instr2:PAnsiChar; var retMsg:PAnsiChar):Integer;stdcall;
var
str1,str2:string;
begin
str1:=Instr1; //此处Instr1、Instr2两个入参都正确,没有乱码,赋值给string变量也没问题
str2:=Instr2;
retMsg:=PAnsiChar(str1+'-'+str2);
Result:=1;
end;
exports
Test;
type
TTest=function(Instr1,Instr2:PChar; retMsg:PChar):Integer;stdcall;
……
……
var
lhandle:THandle;
ltest:TTest;
retMsg:array[0..2000] of AnsiChar;
begin
lhandle:=LoadLibrary('TestDll.dll');
if lhandle>32 then
begin
@ltest:=GetProcAddress(lhandle,'Test');
if ltest(PChar(Edit1.Text),PChar(Edit2.Text),@retMsg)=1 then begin
ShowMessage('调用成功,返回Msg:'+retMsg); //此处retMsg是乱码,怎么回事?
end;
end;
end;