0

我有一些相当旧的进程内 ATL COM 服务器,以前使用 VC++ 2005 构建。

现在这些项目都移植到了VC++ 2015。
由于我需要支持传统的Win XP系统,平台工具集是“VS 2015 - Windows XP”。另外,根据这个问题/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 机器上注册它们时,我会收到 0xC000001D 错误代码LoadLibrary

如何修复/诊断此错误?

PS 如果这是有道理的,XP 嵌入式系统是建立在 AMD Geode 处理器之上的,而 XP Pro 系统是建立在普通 Intel 处理器之上的。

4

1 回答 1

0

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

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

在此处输入图像描述

于 2016-01-25T20:28:51.447 回答