0

以前はVC++ 2005を使用して構築された、かなり古いインプロセスATL COMサーバーがいくつかあります。

現在、これらのプロジェクトは VC++ 2015 に移植されています。
従来の Win XP システムをサポートする必要があるため、プラットフォーム ツールセットは「VS 2015 - Windows XP」です。また、this 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 エラー コードが表示されます。

このエラーを修正/診断するにはどうすればよいですか?

PS これが理にかなっている場合、XP 組み込みシステムは最上位の AMD Geode プロセッサ上に構築されていますが、XP Pro システムは通常の Intel プロセッサ上に構築されています。

4

1 に答える 1

0

私は理解しました、何が問題なのか。
この問題は、デフォルトで VC++ コンパイラ (x86 プロジェクトの場合は SSE2) で使用される Geode プロセッサと命令セットの組み合わせにあります。これは最新および/または「成熟した」プロセッサでは機能しますが、Geode では失敗します。

このオプションを SSE に変更すると、すべて正常に動作します。

ここに画像の説明を入力

于 2016-01-25T20:28:51.447 に答える