在VB调用VC的dll非要def文件吗?我不想写def文件,觉得太麻烦了。大虾们能不能指点一二。

解决方案 »

  1.   

    你要将VC中供VB调用的函数声明为 __stdcall 调用约定,如:void __stdcall GetHostIPs(LPTSTR pHostIPs,int nLen)在VB程序中声明一下要调用的函数:如
    Public Declare Sub GetHostIPs Lib "MyGetHostIPs.dll" (ByVal pHostIPs As String, ByVal nLen As Long)VB中调用方法如下:
    Function pf_GetHostIP() As String
        Dim strHostIPs As String
        
        strHostIPs = Space(256)
        GetHostIPs strHostIPs, 256
        
        
        If InStr(1, strHostIPs, Chr(0)) > 0 Then
            pf_GetHostIP = Left(strHostIPs, InStr(1, strHostIPs, Chr(0)) - 1)
        Else
            pf_GetHostIP = strHostIPs
        End If
    End Function
      

  2.   

    可以不用,在VC下,你可以 __declspec( dllexport )来导出函数,但是使用这组关键字的时候要注意:需要设置编译选项,否则连接器会修改你的函数名称。编译选项的设置如下:/export:你的函数名称=你的函数名称
      

  3.   

    你要将VC中供VB调用的函数声明为 __stdcall 调用约定,如:void __stdcall GetHostIPs(LPTSTR pHostIPs,int nLen)在VB程序中声明一下要调用的函数:如
    Public Declare Sub GetHostIPs Lib "MyGetHostIPs.dll" (ByVal pHostIPs As String, ByVal nLen As Long)    这种方法绝对是需要.def文件的
      

  4.   

    这种方法绝对是需要.def文件的
    ----------
    不一定吧,我试过不用def生成DLL的函数,照样在VB下调用。
      

  5.   

    def有什么麻烦的
    你用 extern "C" __declspec(dllexport) WINAPI 吧, 函数名前面加一个_后面加一个@和参数大小, 如 
    Sub GetHostIPs Lib "MyGetHostIPs.dll" alias "_GetHostIPs@8" (ByVal pHostIPs As String, ByVal nLen As Long)