从 VB 6.0 dll 调用 win 32 C 库函数崩溃

标签 c vb6

我有一个 C 库 Cdll.dll,它具有以下功能

int _stdcall AddVersion(int repval) 
{
    return (repval + 10);
}

我从 VB dll 调用这个 AddVersion 函数。

Private Declare Function AddVersion Lib "cdll.dll" (ByVal Repval As Integer) As Integer
...

Public Function VbMessageHandler(ByRef intVal As Integer) As Integer
   intVal = AddVersion(10)
End Function

我通过为 VB dll 创建 COM 包装器从 C dll 调用此 VB dll。

ret = ObjVbclass->VbMessageHandler(&IntegerValue);

当我在我的 C exe 应用程序中使用此 VBWrapper dll 时,它因抛出运行时异常而崩溃。

最佳答案

你的声明是错误的。由于历史原因,VB6 Integer 是 16 位,而 C int 是 32 位。请改用 Long。

Private Declare Function AddVersion Lib "cdll.dll" (ByVal Repval As Long) As Long

关于从 VB 6.0 dll 调用 win 32 C 库函数崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3193589/

相关文章:

unit-testing - 如何使用第 3 方 dll 对 .EXE 进行单元测试?

vba - 使用 VB6 从 .xls 文件中提取/显示宏 (VBA)(无需打开 Excel)

c - 结构中的静态变量位于何处?

我可以将同一个文件指针分配给第二个文件吗?

c - 防止控制台窗口在 Visual Studio 中关闭

vb6 - 为什么 FileCopy 在 Windows 7 上随机失败?

com - VB.Forms 处出现错误 -2147417848。通过 COM 添加调用

c - ptr = free(ptr), NULL 安全吗?

c - 使用按值传递更新实际值

.net - VB 通用对话框.MaxFileSize