Win7上的"试图读取或写入受保护的内存"错误 - activeX控制失败

Boo*_*rry 4 .net activex windows-7 winforms

我们有一个Windows应用程序(.net,VS2010),它使用一个旧的包装的activeX控件(来自ComponentOne的VSPrinter 8,确切地说是.vsprint8.ocx).这可以处理我们所有的打印和打印预览.当我们将应用程序部署并运行到VM(32位)上的Win7的新实例时,并执行尝试调用此控件的操作时,会收到以下错误:

"试图读取或写入受保护的内存.这通常表明其他内存已损坏."

它继续在Windows XP上正常运行.有趣的是,如果我们关闭目标VM上的DEP(系统范围,设置为AlwaysOff),则应用程序可以正常运行.但是如果我们仅关闭使用ocx的可执行文件的DEP,它就不起作用.

有任何想法吗?谢谢!

Boo*_*rry 5

找到了解决方案.

我无法有效地关闭有问题的可执行文件的DEP,所以我在VS2010中的post-build事件命令行中添加了以下行,它修复了我的问题:

call "$(DevEnvDir)\..\..\VC\bin\vcvars32.bat"
call "$(DevEnvDir)\..\..\VC\bin\editbin.exe" /NXCOMPAT:NO "$(TargetPath)"
Run Code Online (Sandbox Code Playgroud)

在VS Solution Explorer中,右键单击解决方案下的项目,选择Properties,然后单击Build Events.您将看到"构建后事件命令行:"文本框,您可以在其中插入上述内容.

这有效地为我的应用禁用了DEP.这篇博文让我看到了光明.谢谢,随机的老兄!

http://jtstroup.net/post/Attempted-to-read-or-write-protected-memory-This-is-often-an-indication-that-other-memory-is-corrupt.aspx