win7 .net代码(调用interop vb6 dll)在调试器中工作,无法独立运行

时间:2013-09-17 15:27:12

标签: .net debugging vb6 interop

环境:使用VS2005和VB6安装Win7 64位。 以前所有应用程序都在XP上工作正常,我正在移植到Win7 64。

答:一个Win7 VB.NET应用程序,主要的应用程序。 B:用VB6编码的互操作程序。 B引用了另一个用VB6编写的COM dll。

A的调用工作正常,1)在VS2005调试模式下运行A或2)在VB调试模式下以A作为启动程序运行B.

但是当运行A独立时,即在任何IDE之外运行时,A在呼叫B时失败。

首先,A调用B时会产生内存访问冲突。然后我在B上调用了一个不同的方法,这次,B弹出一个错过某些GUI控件的对话框,但是调用没有崩溃整个应用程序。

Per George的问题:我以管理员身份启动了VS2005和VB6,因此调试执行是在本地管理员下进行的。独立运行也在管理员之下,因为我以管理员身份启动了一个PowerShell窗口并从那里启动了应用程序。谢谢乔治。

是,目标CPU设置为X86(不是“任何CPU”),tx 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,后者又显示包含第三方网格控件(VSFlexGrid8.ocx)的表单。当我在VS2005中调试运行A或在VB6中调试运行B时,一切似乎都有效,但是当我运行A独立时,表单会弹出,但是它上面的VSFlexGrid丢失,试图找到有关VSFlexGrid的更多信息在互操作......

解决: 确切地说,我找到了一个更新的VSFlexGrid8.ocx版本 VSFlex8 Build Number 8.0.20132.297 Build Date:2013年9月13日,文件名 vsflex8_8.0.20132.297.zip,解决了这个问题。抱歉,我没有保留下载网址。

2 个答案:

答案 0 :(得分:0)

我们在几乎相同的设置(VsFlex7网格而不是VsFlex8)中遇到了相同的错误。

解决它的关键是“数据执行预防(DEP)”功能。 尝试将其设置为“OptIn”模式,并将您的流程放在例外列表中。

HTH

佐尔坦

答案 1 :(得分:0)

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