delphi动态库代码
function aaa(CardCode: PAnsiChar; var RtnStr: PAnsiChar):Integer;stdcall;
var
  Rtn: AnsiString;
begin
 
    ShowMessage(String(CardCode)); //正常显示
    Rtn :=  '001|测试|1|200.03|0|';
ShowMessage(String(Rtn)); //正常显示   001|测试|1|200.03|0|
    RtnStr := PAnsiChar(Rtn);
    ShowMessage(PChar(RtnStr));//不能正常显示    
result := 0; 
end;pb9调用代码
string ls_ybkh, ls_trn,
int ils_ybkh = space(128)
ls_trn  = space(256)ls_ybkh = "001"i = GetPersonInfo(ls_ybkh, ls_trn)MessageBox('a', ls_ybkh + '|' +  ls_trn + '|' + string(i))在动态库里就不能显示要回传的字符串
在pb里也是乱码好久不用delphi了,不知道怎么弄好了,请各位帮忙,分不够,开贴另给!!!

解决方案 »

  1.   

        RtnStr := PAnsiChar(Rtn);
        ShowMessage(PChar(RtnStr));//不能正常显示    你都知道不能正常显示了,就不知道:ShowMessage(PAnsiChar(RtnStr)); ???
      

  2.   

    pb里面的string是ansistring还是unicodestring要搞清楚。
      

  3.   

    pb里的string不知道是什么呀
      

  4.   

    你按两种方式都试一下就知道了。
    另外,你的pb中GetPersonInfo(ls_ybkh, ls_trn)的函数原型声明是啥,和DLL中function aaa(CardCode: PAnsiChar; var RtnStr: PAnsiChar):Integer;stdcall;能不能对上,尤其是参数传递方式。
      

  5.   

    StrPCopy
      

  6.   

    pansichar与string是不能直接相互转换的,采用StrPCopy