我用DELPHI写了一个非常简单的DLL做试验,让VB调用,
发现用除了PCHAR类型以外得所有类型做为传递参数在VB就能调用成功,可是一用PCHAR,
VB调用的时候老是关闭性错误!
请那位高人指点迷经(函数调用一定得有字符参数)
程序如下:
Delphi DLL
**********************************
library Project1;
uses
  SysUtils,
  Classes;{$R *.res}
function robtest(VAR buf:pchar):integer;stdcall;
  begin
   buf:='rob';
   result:=2003;
  end;exports
   robtest;
begin
end.
*************************************************
VB 调用程序
Private Declare Function robtest Lib "c:\windows\desktop\dll\test\Project1.dll" (ByVal buf As String) As LongPrivate Sub Command1_Click()
Dim a As Integer
Dim bb As String 
a = robtest(bb)
Text1.Text = Text1.Text + bb + ";" + Str(a)
End Sub
**************************************************

解决方案 »

  1.   

    将参数表中的var去掉, 试试, 我用PB就没问题,VB不会用
      

  2.   

    问题自己已经解决了
    是DELPHI中function里用Var 声明的参数,在VB调用里不能加Byval
    delphi里给PCHAR参数赋值时用,用个string类型变量倒一下
    修改后
    elphi DLL
    **********************************
    library Project1;
    uses
      SysUtils,
      Classes;{$R *.res}
    function robtest(VAR buf:pchar):integer;stdcall;
    var
    tempL:string;
    begin
       temp:='rob';
       buf:=pchar(temp);
       result:=2003;
    end;exports
       robtest;
    begin
    end.
    *************************************************
    VB 调用程序
    Private Declare Function robtest Lib "c:\windows\desktop\dll\test\Project1.dll" (buf As String) As LongPrivate Sub Command1_Click()
    Dim a As Integer
    Dim bb As String 
    a = robtest(bb)
    Text1.Text = Text1.Text + bb + ";" + Str(a)
    End Sub
    **************************************************