程序源码
函数声明:
Function DataDown_sp(InStr,InBz :String;Var OutStr:String):Pchar;stdcall;external 'C:\Tjyb\yhybReckoning.dll' name '_DataDown_sp@12';
函数调用:
Var
  Tjyb_ResStr :Pchar;
  Tjyb_InStr :Pchar;
  Tjyb_InBz :Pchar;
  Tjyb_OutStr :Pchar;
  Tjyb_OutStr :String;
Begin
  tjyb_resStr := '';
  tjyb_instr :=';6091201062999999992=';
  tjyb_inbz := 'U';
  Tjyb_ResStr := DataDown_sp(tjyb_instr,tjyb_inbz,Tjyb_OutStr);
End;
问题:
Tjyb_OutStr和DataDown_sp的outstr 如果都定义成string时,就不能接收DataDown_sp函数的传出值,运行时会出现地址错误,如果是定义成shortstring就可以,但是shotrstring长度有限制,只能有255长度。
大家有没有调用pb的dll这方面的经验???

解决方案 »

  1.   

    另说明一点:
    Tjyb_ResStr  :=  DataDown_sp(tjyb_instr,tjyb_inbz,Tjyb_OutStr);  
    这句语句能够运行过去,Tjyb_ResStr也可能获得到值,就是Tjyb_OutStr得不到值
      

  2.   

    不要在DLL中传递string类型的变量,
    改为array或PChar.
    如果有PB的DLL源码, 建议转为兼容的基本类型的变量.
      

  3.   

    如果使用string类型作dll参数,要把borlndmm.dll同程序一起发布
      

  4.   

    to :
    luxuewei5214(小卢)
    同borlndmm.dll一起发布是什么意思,这个borlndmm.dll哪里有,
    我是一个小菜,不是很懂
      

  5.   

    Function DataDown_sp(InStr,InBz :String;Var OutStr:String):Pchar;stdcall;external 'C:\Tjyb\yhybReckoning.dll' name '_DataDown_sp@12';改成Function DataDown_sp(InStr,InBz :String;OutStr:String):Pchar;stdcall;external 'C:\Tjyb\yhybReckoning.dll' name '_DataDown_sp@12';
    就是把var去掉了就可以了,但是有一个问题是传出的参数OutStr会多一个空格,不知大家会不会这样
      

  6.   

    powerbuilder中的dll不是真正意义上的动态链接库,无论是VC还是delphi都无法调用powerbuilder中的函数