在XP嵌入式上,LoadLibrary以0xC000001D失败,但在XP专业版上按预期运行

时间:2016-01-25 19:14:00

标签: visual-c++ windows-xp atl windows-xp-embedded visual-c++-2015

我有许多相当老的进程内ATL COM服务器,以前是使用VC ++ 2005构建的。

现在这些项目被移植到VC ++ 2015 由于我需要支持传统的Win XP系统,因此平台工具集是“VS 2015 - Windows XP”。此外,根据此issue,设置了/Zc:threadSafeInit-编译器选项。

所有服务器都是使用ATL属性编写的,每个项目都有类似的东西:

[module(dll, uuid = "{E49F47F5-C0E2-4C1D-8C66-BF8AE6DDF5A1}",
    name = "MyLib",
    helpstring = "MyLib 1.0 Type Library",
    resource_name = "IDR_MYLIB")]
class CMyLibModule
{
public:
    // Override CAtlDllModuleT members
};

问题所在。 所有这些项目在WinXP Pro上运行良好。但是当我尝试在XP Embedded机器上注册它们时,我在LoadLibrary调用时得到0xC000001D错误代码。

如何修复/诊断此错误?

P.S。如果这是有道理的,XP嵌入式系统建立在顶级AMD Geode处理器上,而XP Pro系统则位于常规Intel处理器之上。

1 个答案:

答案 0 :(得分:0)

我发现了,问题是什么 问题在于默认情况下由VC ++编译器使用的Geode处理器和指令集 - 用于x86项目的SSE2。这适用于现代和/或“成熟”处理器,但在Geode上失败。

将此选项更改为SSE后,一切正常:

enter image description here