你要将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
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
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
Public Declare Sub GetHostIPs Lib "MyGetHostIPs.dll" (ByVal pHostIPs As String, ByVal nLen As Long) 这种方法绝对是需要.def文件的
----------
不一定吧,我试过不用def生成DLL的函数,照样在VB下调用。
你用 extern "C" __declspec(dllexport) WINAPI 吧, 函数名前面加一个_后面加一个@和参数大小, 如
Sub GetHostIPs Lib "MyGetHostIPs.dll" alias "_GetHostIPs@8" (ByVal pHostIPs As String, ByVal nLen As Long)