16,747
社区成员




- 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;