我在VB6中开发,我正在尝试使用C ++ DLL。 SDK我有C#中的示例,我试图让以下函数在VB6中工作:
这是.h文件中的内容:
BS_API_EXPORT void* BS_CALLING_CONVENTION BS2_AllocateContext();
BS_API_EXPORT int BS_CALLING_CONVENTION BS2_Initialize(void* context);
C#中的声明:
extern public static IntPtr BS2_AllocateContext();
extern public static int BS2_Initialize(IntPtr context);
在C#中的用法:
private IntPtr sdkContext;
sdkContext = IntPtr.Zero;
.
.
sdkContext = API.BS2_AllocateContext();
result = API.BS2_Initialize(sdkContext);
现在我想在VB6中做同样的事情: 声明:
Public Declare Function BS2_AllocateContext Lib "BS_SDK_V2" () As Long
Public Declare Function BS2_Initialize Lib "BS_SDK_V2" (ByRef Context As Long) As Long
用法:
Dim sdkContext As Long
sdkContext = BS2_AllocateContext()
result = BS2_Initialize(sdkContext)
<--- VB6 environment crashes
根据我的理解,IntPtr与VB6中的Long相同
但是呢?*
(我也尝试将ByRef更改为ByVal,但我得到的是“错误的DLL调用约定”) 那为什么会崩溃?
我没有收到错误消息。整个VB6环境崩溃: “Visual Basic已停止工作 一个问题导致程序停止正常工作。 Windows将关闭....“
答案 0 :(得分:0)
要调用API,您需要封送VB整数变量的地址。当调用“ BS2_Initialize”时,可以在“ sdkContext”上使用“ VarPtr”来实现。
例如
结果= BS2_Initialize(VarPtr(sdkContext))