DELPHI 制作的 DLL 函数返回类型为 pchar ,在 PB 中用 String 声明,但是接收到的字串后面附带一些乱字符,如:实际字串是 33260380,但取得的是 33260380  $ ,多了几个空格和一个 $ 字符,不知是何问题,烦请精通 Delphi 或 PB 的各路大侠不吝赐教!以下是我的 Delphi 函数和 PB 声明,大家帮忙看看问题出在哪里。function xml_getdata(nRow: Integer; cAttrib: PChar): PChar; stdcall; export;
Var
   ls_Value:String;
begin
   ls_Value:=f_GetData(nRow,cAttrib);  // 这一行是绝对没有问题的,问题可能就在下面这几行。   Result:=PChar(ls_Value);
end;PB 声明:
function string xml_getdata(Integer nRow,String cAttrib) Library 'wsxmldat.dll'

解决方案 »

  1.   

    把Dll改成string类或者把PB函数声明成pchar类
    再或者在pb中的string里判断#0,自己截取
      

  2.   

    to d983074(d983074):Delphi DLL 中不能返回 String 类型,只能用 Pchar, PB 中没有 Pchar 类型,只有 String, 接收到的字串中没有 #0 字符。
      

  3.   

    声明为String;
    在dll中加入sharemem ,应该没有问题,我以前做过这方面的开发。
      

  4.   

    我以前试过可以用string类,不过只能用delphi调用,pb应该差不多吧
      

  5.   

    TO chbchen(代码工人) :谢谢!我试试。但是加入 Sharemem 需要 BolandMM.dll 文件支持,不知道有没有其他方法。
      

  6.   

    TO chbchen(代码工人) :加入 Sharemem 单元不行,会出现非法操作错误。能否帮我解决一下,我的代码是这样的:library wsxmldat;uses
      sharemem,
      wsxmlexport;Exports
       wsxml_getdata;begin
    end.wsxmlexport 单元中声明如下:function wsxml_getdata(nRow: Integer; cAttrib: string): string; stdcall; export;
      

  7.   

    实在不行的话在dll的pchar最后自己加个#0巴:)
      

  8.   

    function xml_getdata(nRow: Integer; cAttrib: PChar): PChar; stdcall; export;改为
    function xml_getdata(nRow: Integer; cAttrib: String): PChar; stdcall; export;试一下!