gpt4 book ai didi

c# - 相当于 IntPtr 用法的 VB6

转载 作者:太空宇宙 更新时间:2023-11-03 14:56:30 25 4
gpt4 key购买 nike

我正在使用 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

但是 void* 呢?

(我也尝试将 ByRef 更改为 ByVal,但我得到“Bad DLL calling convention”)那么为什么会崩溃呢?

我没有收到错误消息。整个 VB6 环境都崩溃了:“Visual Basic 已停止工作一个问题导致程序停止正常工作。Windows 将关闭……”

最佳答案

为了调用 API,您需要编码 VB 整型变量的地址。这可以在调用“BS2_Initialize”时使用“sdkContext”上的“VarPtr”来完成。

例如

result = BS2_Initialize(VarPtr(sdkContext))

关于c# - 相当于 IntPtr 用法的 VB6,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48747696/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com