1

环境: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,解决了这个问题。抱歉,我没有保留下载地址。

4

2 回答 2

0

we've experienced the same error in an almost identical setup (VsFlex7 grid instead of VsFlex8).

The key to resolving it was the "Data Execution Prefention (DEP)" feature. Try to set it to 'OptIn' mode and put your process on the exception list.

HTH

Zoltán

于 2013-10-01T09:41:58.053 回答
0

正确的操作系统级别设置为“AlwaysOff”。但我认为最好的解决方案是使用带有 /NXCOMPAT:NO 的“editbin.exe”。格雷格

于 2013-10-01T13:30:06.110 回答