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,它就不起作用.
有任何想法吗?谢谢!
找到了解决方案.
我无法有效地关闭有问题的可执行文件的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.这篇博文让我看到了光明.谢谢,随机的老兄!