2008-08-03 14 views
17

私が移行しようとしているMFCアプリケーションは_AFXDLLを使用して/MTを設定するとこのエラーの原因となる_AFXDLLを使用します:Visual Studio 2005を使用してWindows NT 4.0用にビルドしますか?

_AFXDLL用に/ MDスイッチを使用してください

これまでの私の研究は、Visual Studio(この場合はC++)2005を使用してWindows NT 4.0上で実行するアプリケーションを構築することは不可能であることを示しています。

これは本当ですか?利用可能な回避策はありますか?

+1

これを守る –

答えて

8

いいえ、Windows XP、2000、NT、スタック全体をサポートする必要があるVS2005を使用して構築された多くのアプリケーションがあります。問題は、(デフォルトでは)VS2005がNT上に存在しないライブラリ/エクスポートを使用したいということです。

背景についてはthis threadを参照してください。

次に、プリプロセッサマクロを使用して依存関係を限定し、NTでサポートされていないAPIを回避します。

+0

この問題を混乱させる原因は、静的リンクの場合、使用するシンボルに必要なオブジェクトファイルだけが実際に引き込まれるため、ほとんどの場合NT4で動作するように見えます。 –

4

_AFXDLLエラーを取り除くには、MFCをDLLではなく静的なライブラリとして使用するように設定を変更してみましたか?これは、ランタイムライブラリをDLLではなく静的に変更する際に既に行っている作業と似ています。

1

私はAFXEXT.Hに慣れていないんだが、私は

....それについてのWindows NT4とは互換性がありませんかと思っていますが、元の質問に答えるために: を「これまでの私の研究が示しますVisual Studio(この場合はC++)2005を使用してWindows NT 4.0上で実行するアプリケーションを構築することは不可能であることを示しています。

NT4でアプリケーションが作成されている場合は、特に答えが肯定である必要があります。 afxext.hを脇に置いておくと、これは簡単にできるはずです。

私が問題を抱えているもう一つのことは、人々が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インターフェイス?)プロジェクトをVC 8.0のアンマネージC++プロジェクトに変換できますか?

うまくいけば、このうちのいくつかが役立つでしょう。

3

回避策は、マルチスレッドDLLを修正することです。 Simple instructions。要約:

出荷8.0 CランタイムライブラリDLL(MSVCR80.DLL)が唯一の理由で NT 4.0 SP6と一つの理由をサポートしていません:マイクロソフト で誰かが存在しないGetLongPathNameWに関数呼び出しを追加しましたNT 4.0では kernel32.dllにあります。

CRTLIB.Cライン577では、GetLongPathNameWが呼び出されます。単にそれを次のものに置き換えてください:ret = 0; NT 4.0ではこのMSVCR80.DLLのビルドのみを使用してください。

これらが機能したら、より包括的な解決策を考えてください。

-1

考えてみると、静的ライブラリにリンクするにはexeが必要です。

この 「構成プロパティ」、「全般」、「MFCの使用」を「静的ライブラリで使用MFC」 「構成プロパティ」、「全般」、「ATLの使用」を「静的リンクをお試しくださいATLへの」

"構成プロパティ"、 "C \ C++"、 "コード生成"、 "ランタイムライブラリ" の "マルチスレッド(\ MT)"

テストプラットフォーム ビルドマシン:Visual Studio 2005のWindows XP SP2の場合 クライアントマシン:Window XP SP2(VS2005がインストールされていない場合)

関連する問題