移行しようとしている MFC アプリケーションが を使用しているため、設定afxext.h
が発生_AFXDLL
し、設定すると次のエラーが発生します/MT
。
_AFXDLL ビルドには /MD スイッチを使用してください
これまでの調査によると、Visual Studio (この場合は C++) 2005 を使用して、Windows NT 4.0 で実行するアプリケーションを構築することは不可能です。
これは本当ですか?利用可能な回避策はありますか?
移行しようとしている MFC アプリケーションが を使用しているため、設定afxext.h
が発生_AFXDLL
し、設定すると次のエラーが発生します/MT
。
_AFXDLL ビルドには /MD スイッチを使用してください
これまでの調査によると、Visual Studio (この場合は C++) 2005 を使用して、Windows NT 4.0 で実行するアプリケーションを構築することは不可能です。
これは本当ですか?利用可能な回避策はありますか?
いいえ、VS2005で構築された多くのアプリケーションがあり、Windows XP、2000、NT、スタック全体をサポートする必要があります。問題は、(デフォルトで)VS2005がNTに存在しないライブラリ/エクスポートを使用したいということです。
背景については、このスレッドを参照してください。
次に、プリプロセッサマクロを介して依存関係を制限し、NTでサポートされていないAPIを回避します。
_AFXDLL エラーを解消するために、MFC を DLL ではなく静的ライブラリとして使用するように設定を変更してみましたか? これは、ランタイム ライブラリを DLL ではなく静的に変更する際に既に行っていることと似ています。
回避策は、マルチスレッド DLL を修正することです。簡単な説明書。簡単な要約:
出荷されている 8.0 C ランタイム ライブラリ DLL (MSVCR80.DLL) が NT 4.0 SP6 をサポートしていない理由は 1 つだけです。Microsoft の誰かが
GetLongPathNameW
、NT 4.0 の kernel32.dll に存在しない関数呼び出しを追加したためです。CRTLIB.C 577 行目に、 への呼び出しがあり
GetLongPathNameW
ます。ret = 0;
NT 4.0 では、MSVCR80.DLL のこのビルドのみを使用してください。
それらが機能したら、より一般的な解決策を考え出すのは簡単です。
私はafxext.hに精通していませんが、それがWindowsNT4と互換性がないのはなぜだろうと思っています。
ただし、元の質問に答えるには、「これまでの私の調査によると、Visual Studio(この場合はC ++)2005を使用してWindowsNT4.0で実行するアプリケーションを構築することは不可能です。」
特にアプリケーションが元々NT4で作成または実行されている場合は、答えは「はい」になります。afxext.hのことはさておき、これは簡単なYESになるはずです。
私が問題を見つけているもう一つのことは、人々がNT用語を捨てているという緩い性質です。確かに、ほとんどの人は「NT」をWindows NT4と考えていますが、「ほとんどの人」は「すべての人」と同じではないため、あいまいです。
実際には、「NT」という用語はNTシリーズと同じです。NTシリーズはNT3、NT4、NT5(2000、XP、2003)およびNT6(Vista)です。
Win32は、C /C++コードも対象とするサブシステムです。したがって、このNT4プラットフォームとサブシステムをターゲットにできない理由はわかりません。または、これがプラットフォーム移植の演習である場合は、VCが課している可能性のあるMFC依存関係を削除してください。
afxext.hをミックスに追加すると、サブシステムの互換性の問題のように聞こえます。これは、私のGoogleの調査によるMFCの一部です。afxext.hは、MFC(Microsoft Foundation Class)拡張機能のようです。
MFCへの依存を取り除くことはできますか?これはどのような種類のアプリケーションですか?(CLR、サービス、GUIインターフェイス?)VC8.0でプロジェクトをアンマネージC++プロジェクトに変換できますか?
うまくいけば、これのいくつかはあなたを助けるでしょう。
アイデアは、静的ライブラリにリンクするためにexeが必要であるということです。
この「構成プロパティ」、「一般」、「MFC の使用」から「静的ライブラリで MFC を使用する」、「構成プロパティ」、「一般」、「ATL の使用」から「ATL への静的リンク」を試してください。
「構成プロパティ」、「C\C++」、「コード生成」、「ランタイム ライブラリ」から「マルチスレッド (\MT)」
テスト プラットフォーム ビルド マシン: Windows XP SP2 上の Visual Studio 2005 クライアント マシン: Window XP SP2 (VS2005 がインストールされていない)