【发布时间】:2012-02-29 22:15:42
【问题描述】:
我有一个包装对第 3 方组件的调用的 VB6 DLL。当我从 VB6 调用我的 DLL 时,一切正常,但是当我从 vb.net(针对 2.0 框架 - VS2010)调用它时,我收到此错误:
发生AccessViolationException
试图读取或写入受保护的内存。这通常是一个 指示其他内存已损坏。
此错误仅在 Windows 7 上发生(Windows XP 客户端工作正常)。
我查过这个,我发现的所有文章都谈到声明不正确。不过,我没有声明任何 API 调用,第 3 方组件在我的 VB6 DLL 中是早期绑定的。我可以运行 DLL,设置断点,然后它进入我的 VB6 函数,但在调用 3rd 方组件中的函数时出错。
我的 VB6 DLL 采用 3 个字符串和一个 32 位数字(在 VB6 中为长)参数。我正在调用的第 3 方的 DLL 函数采用字符串(bstrDNSID 作为字符串是 Intellisense 在 VB6 中显示的内容)。这是它出错的地方。
有谁知道如何解决这个问题?
更新: 编组都没有帮助,所以我尝试在我的 VB6 DLL 中创建一个测试子。我硬编码了 DLL 的测试子中的所有值。从 VB6 调用时它工作正常,但从 .NET 运行时会出现与上述相同的错误。同样有趣的是,当我从 VB6 IDE 运行 VB6 DLL 时,从 .NET 调用 DLL 时不会出现错误。
【问题讨论】:
-
第三方组件是COM吗?您正在调用的函数的参数类型是什么?这是一个非常普遍的错误,但是当我没有正确编组字符串时,我得到了它。
-
@Mark - 这根本不是我的问题。我知道如何从 .NET 调用 VB6 DLL,反之亦然。
-
@ken 我已经更新了我的问题。如何正确编组字符串?我想通过调用 VB6 DLL 我不需要编组任何字符串。
-
@Mark 这不是重复的。