今天早上我在VS2013遇到了一个问题,这是我在1 - 3年内遇到的事情之一(无论是我自己还是客户),我还有一个问题。要说"哎呀,我以前见过这个,但我不知道是什么原因造成的。"。
我们为Windows Embedded平台构建,并将客户从VS6.0迁移到VS2013。由于目标硬件仍然是WindowsEmbedded,我们使用v120_xp平台工具集。我已经建成了数百个?项目,从未遇到我今天早上看到的错误。一个包含大量DLL的客户项目,我成功地使用v120_xp重建了所有这些项目,并为性能打开了一些OPTIMIZATION。不确定这是否相关。 SSE2 / Qpar并针对FAST执行进行了优化。所有的DLL构建都很好。客户应用程序构建。
但是在运行时,我在加载ntdll.dll时收到此警告:
ntdll.dll
%hs is either not designed to run on Windows or it contains an error.
Try installing the program again using the original installation media
or contact your system administrator or the software vendor for support.
Error status 0x.
从这个StackOverFlowLink看来,运行时正在选择n64ll.dll的X64版本并可能找到x32位版本。我非常确定它是这样的,但我试图理解。
1)什么可能触发这种行为?我之前还没有在VS2013中看过其他v120_xp项目。 2)我怎么知道它看到了哪个ntdll.dll? 我尝试了依赖walker x64和x32位版本,它们似乎默认不同的行为。
我还在exe上设置兼容模式,强制Windows7在WinXP SP3模式下运行它。那不行。我们通常在GUI中运行我们的EXE,这可能会迫使......
我今天正在研究这个问题,并且如果我找到触发这个问题的最底层的话,我会发布我的发现。 关于这个项目的两件事是独一无二的。 1)我在C ++模块中进行了大量的性能CPU优化。 2)有很多客户DLL模块(也已内置优化)。 所以我的一个工作原理是,优化或DLL正在欺骗运行时认为这是一个X64位模块。
我将检查一个错误的项目是否没有类似的工具集v120_xp。