1

(自从我现在注册为用户后,我正在重新发布此消息)

我刚刚在 Vista Enterprise 机器上安装了 Visual Studio 6 (SP5)。有一些问题,但我认为它设置得很好。

问题是我的 VC++ 6 应用程序在尝试托管 ActiveX 时失败。我能够编译它,但从 Vista 收到关于 rc.exe 的警告消息(“该程序存在已知的兼容性问题”)。

当我调试它时,我看到派生自 CAxDialogImpl 的类在其 Create() 方法上失败。相同的应用程序在 XP 上运行良好!

那里有已知的兼容性问题吗?

一些技术信息:我看到 CAxDialogImpl::Create()(我在这里传递 NULL)调用 AtlAxCreateDialogA,后者又调用 CreateDialogIndirectParama,它会引发一般异常。

非常感谢,埃里克

PS - 1. 我是我机器上的管理员。操作系统是 32 位的。2. 我知道Vista不支持VS6,但我别无选择,因为我在尝试将它迁移到VS 2008时遇到了麻烦。

4

1 回答 1

2

好的。找到原因和解决方案。

这似乎是 DEP 兼容性问题。由于应用程序失败时没有显示异常/消息,因此很难找到。

该问题是由于我的 dll 中使用的旧 ATL 组件引起的。旧版本的 ATL 在运行时生成机器代码,然后尝试从未标记为可执行的内存页面执行此代码,因此如果启用了硬件强制 DEP,则会导致 DEP 冲突。

我的XP机器和vista机器的区别其实是在DEP操作上——vista上的DEP是基于硬件的,导致了这个问题。

此外,我的 COM 应用程序使用相同的 dll 并且工作正常,但是 .Net 应用程序失败了,因为它们是使用 DEP 兼容性标志创建的。

解决方案是从 .Net 应用程序中删除 DEP 兼容性标志。

干杯,埃里克

PS - 两个链接非常有帮助: http: //support.microsoft.com/kb/948468 如何使我的程序与 DEP 兼容?

于 2009-08-04T17:05:05.943 回答