现在我做了一个很简单的dll,可以在delphi中调用(用的是静态链接),但在vb中却出现错误,说“用户定义类型未定义”。是不是delphi编好的dll在编写过程中还要加一些什么,才可以在vb中使用?(比如dll中的初始化代码和退出码,我不知道是什么意思,用来干什么)。还有,我已经把这个dll文件和调用它vb程序放在一个目录下了,vb应该不会找不到这个dll文件吧?

解决方案 »

  1.   

    在delphi的dll函数后面加stdcall,这是windows定义的调用方式
      

  2.   

    我加了呀,还是不能用
    library dlladd;
    uses
      SysUtils,
      Classes,
      add in 'add.pas';
    {$R *.RES}
    exports
      addnew;
    begin
    end.unit add;
    interface
    function addnew(x,y:integer):integer;stdcall;
    implementation
    function addnew;
    begin
      addnew:=x+y;
    end;      
    end.在vb中调用:
    Private Declare Function addnew Lib "dlladd" (ByVal x As integr, ByVal y As Integer) As Integer
    就是这么简单的一个程序呀,怎么回事呢?
      

  3.   

    在vb中调用:
    Private Declare Function addnew Lib "dlladd" (ByVal x As integr, ByVal y As Integer) As IntegerLib 后面应该要写清楚具体的路径,如“D\dlladd.dll"  ,因为程序默认到C盘系统路径下面查找
    DLL文件。
      

  4.   

    初始化代码放在begin ..end之间 特色是:1代码可选 一些必要的工作(如开锁数据段)可由系统完成 2:可设置多个退出过程3:libmain wep对用户透明
      

  5.   

    :(
    还是不行。仍然出现:用户定义类型未定义
    到底是怎么回事呀,我试了一下
    Private Declare Function ExitWindowsEx Lib "user32" (ByVal uFlags As Long, ByVal dwReserved As Long) As Long   是可行的,为什么我自己编写的就有错误呢?
      

  6.   

    bingbing2008(冰冰)
    初始化代码放在begin ..end之间 特色是:1代码可选 一些必要的工作(如开锁数据段)可由系统完成 2:可设置多个退出过程3:libmain wep对用户透明那它对dll影响吗,如果我不需要用到这些?
      

  7.   

    我编写的Delphi文件Delphi.DLL
    library Delphi;
    uses
      SysUtils,
      Classes,
      Dialogs;
    {$R *.RES}function TestDll(A,B:Integer):Integer;stdcall;
    begin
       Result:=A+B;
    end;exports 
       TestDll;  // 函数名称。beginend.
    VB中使用为:
    Private Declare Function TestDll Lib "G:\Delphi.dll" (ByVal x As Long, ByVal y As Long) As IntegerPrivate Sub Command1_Click() Text1.Text = CStr(TestDll(3, 4))
    End Sub