环境:Win7 64位安装VS2005和VB6。所有应用程序以前在 XP 上都可以正常工作,我正在移植到 Win7 64。
A:一个Win7 VB.NET app,主应用程序。B:一个用VB6编码的interop com dll。B 引用了另一个用 VB6 编码的 COM dll。
当 1) 在 VS2005 调试模式下运行 A 或 2) 在 VB 调试模式下以 A 作为启动程序运行 B 时,A 对 B 的调用工作正常。
但是当单独运行 A 时,即在任何 IDE 之外运行时,A 调用 B 失败。
一开始 A 调用 B 时产生了内存访问冲突。然后我让 A 在 B 上调用了不同的方法,这一次,B 弹出一个对话框,错过了某些 GUI 控件,但调用并没有使整个应用程序崩溃.
根据 George 的问题:我以管理员身份启动 VS2005 和 VB6,因此调试执行是在本地管理员下进行的。独立运行也在管理员下,因为我以管理员身份启动了一个 powershell 窗口并从那里启动了应用程序。谢谢乔治。
是的,目标 CPU 设置为 X86(不是“任何 CPU”),谢谢 tcarvin。
更新: 我取得了一点进步——几个 COM 接口的代码如下:
Public Sub Proc (ByRef conn As ADODB.Connection)
Set mbrCN = conn
其中 mbrCN 是类模块的私有成员,我将对象分配更改为复制新实例
Set mbrCN = New ADODB.Connection
With mbrCN
.ConnectionString = conn.ConnectionString
.CursorLocation = adUseClient
.Open
End With
现在一些异常消息消失了,但我仍然面临部分显示的表单问题。具体来说,A 调用 B.method,B.method 依次显示一个包含第 3 方网格控件 (VSFlexGrid8.ocx) 的表单。当我在 VS2005 中调试运行 A 或在 VB6 中调试运行 B 时,一切似乎都正常工作,但是当我单独运行 A 时,表单会弹出,但上面的 VSFlexGrid 丢失了,试图了解更多关于 VSFlexGrid在互操作下......
已解决: 我找到了 VSFlexGrid8.ocx 的更新版本,确切地说是 VSFlex8 Build Number 8.0.20132.297 Build Date: September 13, 2013,文件名 vsflex8_8.0.20132.297.zip,解决了这个问题。抱歉,我没有保留下载地址。