我们有一个 Windows 应用程序(.net,VS2010),它使用旧的包装 ActiveX 控件(来自 ComponentOne 的 VSPrinter 8,准确地说是 vsprint8.ocx)。这处理我们所有的打印和打印预览。当我们在 VM(32 位)上部署和运行我们的应用程序到一个新的 Win7 实例,并尝试调用此控件时,我们收到以下错误:
“尝试读取或写入 protected 内存。这通常表明其他内存已损坏。”
它继续在 Windows XP 上正常工作。有趣的是,如果我们关闭目标 VM 上的 DEP(系统范围内,设置为 AlwaysOff),应用程序就可以工作。但是如果我们只在使用 ocx 的可执行文件上关闭 DEP,它就不起作用。
有任何想法吗?谢谢!
最佳答案
找到了解决办法。
我无法有效地关闭有问题的可执行文件上的 DEP,所以我在 VS2010 的构建后事件命令行中添加了以下几行,它解决了我的问题:
call "$(DevEnvDir)\..\..\VC\bin\vcvars32.bat"
call "$(DevEnvDir)\..\..\VC\bin\editbin.exe" /NXCOMPAT:NO "$(TargetPath)"
在 VS 解决方案资源管理器中,右键单击解决方案下的项目,选择属性,然后单击生成事件。您将看到“构建后事件命令行:”文本框,您可以在其中插入上述内容。
这有效地禁用了我的应用程序的 DEP。这是帮助我看到光明的博客文章。谢谢,随机伙计!
http://jtstroup.net/post/Attempted-to-read-or-write-protected-memory-This-is-often-an-indication-that-other-memory-is-corrupt.aspx
关于.net - Win7 上的 "Attempted to read or write protected memory"错误 - activeX 控制失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4675157/