Delphi编译的Dll中声明函数如下:
function ShowForm(PDept: PChar): boolean; stdcall;在PB9.0中声明:FUNCTION boolean ShowForm(ref String PDept) LIBRARY "project1.dll"调用时出现:
PowerBuilder Application Execution Error(R0021)
  Applicaton terminated.
  Error:Bad runtime function reference at line 1 in clicked event fo object cb_1 of main请问:这是个什么错误。我该如何调用这个函数(在Delphi中调用正常)

解决方案 »

  1.   

    改D中的函数接口用数组吧
    type
      ChrArray = array[0..255] of Char
    function ShowForm(PDept: ChrArray): boolean; stdcall;
    再改PB中的接口调用,也用0..255的Char数组试试PB我不懂大概应该这样吧:
    FUNCTION boolean ShowForm(ref Char PDept[256]) LIBRARY "project1.dll"
      

  2.   

    应该是这样才对吧
    FUNCTION boolean ShowForm(Char PDept[256]) LIBRARY "project1.dll"
      

  3.   

    如果不需要DLL返回信息,这样定义即可:
    function ShowForm(const PDept: PChar): boolean; stdcall;PB中:
    FUNCTION boolean ShowForm(String PDept) LIBRARY "project1.dll"
      

  4.   

    偶也遇上相同的问题.
    一个函数传入pchar得到pchar..stdcallPB中调用时,有时候要出错,有时候不出错,
    在某些特定的函数之后就要出错,怀疑PB中的string类型跟pchar不完全兼容!
      

  5.   

    在DELPHI的DLL里: 
         function dosomething(out s:shortstring) :dword ;stdcall; 
        var 
         len : integer; 
        begin 
         /*对S赋值*/ 
         ... 
         /*获取S的长度*/ 
         len := length(s); 
         /*从第2个字节将S 前移一位*/ 
         move(s[1],s[0],len); 
         /*将S 变成null-terminate的字符串*/ 
         s[len] := #0; 
         result := 1; 
        end; 
    参考http://www.china-askpro.com/msg44/qa41.shtml
      

  6.   

    这个问题我只有在类型是String型的时候遇到。PB偶不会用。但是写过DLL给PB用。直接就是PChar。没有问题。在Delphi中的PChar等价于C或者是C++里的Char*,不知道在PB中是怎么定义的?还有在PB中String的长度是多少?你看一下。然后用对应的类型来进行调用吧。
      

  7.   

    你的DLL放的路径不对,请放至 winnt/system32下面
    然后,传入传出的字符串用pchar类型 函数调用类型为stdcall;
      

  8.   

    http://community.csdn.net/Expert/topic/3562/3562465.xml?temp=.5052912刚回的一个相关贴子..
      

  9.   

    哦。那如果要vb或者vc和delphi共用一个dll,该注意哪些呢?
      

  10.   

    这个是PB问题,偶也写过很多DLL给PB开发人员使用过,对PChar的使用是有个技术问题的
    是不是要分配好ref string的空间,我不会pb但是听了PB开发人员的介绍好像有这么一条的