2016-11-04 212 views
3

私は検索しましたが、効果やメカニズムのような意味のある説明をヒットしませんでしたので、わかりました。 「意味の説明」たとえば、オンライン_DEBUGプリプロセッサを説明する、非常にいくつかの材料があるが、それをオンにする方法assertなどプリプロセッサ `_AFXDLL`はどういう意味ですか?

MSDNのページ#1 Building Settings for an MFC DLL for Visual Studio 6.0これは、1)通常のDLLのために静的にMFCrequiredにリンクされていないと言うことができます2)通常のDLL、共有MFC DLL、または3)拡張DLLを使用する場合に必要です。しかしそれ以上の説明はありません。

MSDN言及したページ#2 AFXDLL Versions簡単に:代わりに静的にMFC オブジェクトコードのライブラリにリンクすることによって、アプリケーションを構築する

、あなたは AFXDLLライブラリのいずれかを使用するようにアプリケーションを構築することができ、その複数のアプリケーションが共有することができるDLLにMFCが含まれています。 AFXDLL名の表については、DLL:Naming の表記規則を参照してください。

注:既定では、MFCアプリケーションウィザードはAFXDLL プロジェクトを作成します。代わりにMFCコードの静的リンクを使用するには、 でMFCを使用するMFCアプリケーションウィザードでスタティックライブラリオプションを設定します。静的リンク は、Visual C++のStandard Editionでは使用できません。

が、私もこのAFXDLL_AFXDLLプリプロセッサに関連しているかはわかりません。

StackOverflowのポストUnexplainable error "Please use the /MD switch for _AFXDLL builds"#error Please use the /MD switch for _AFXDLL builds/MTまたは_AFXDLL/MTd紛争が、これはMSDNのページ#1、何も新しいと同じであることを説明しました。

誰かがPLS _AFXDLLプリプロセッサが何を意味し

  • を説明してもらえますか?元の動機は?
  • コンパイルやリンクにどのような影響がありますか?
  • は廃止されましたか?
  • は、AFXDLLライブラリに関連するプリプロセッサですか?_AFXDLLです。実際には、いわゆるAFXDLLライブラリとは何ですか?
+0

AFXDLLに対してコンパイルするときにコンパイラによって定義された '_AFXDLL'はありませんか?ターゲットに依存する機能を追加することができます。 – Steeve

+0

AFXDLLとは何ですか? – athos

+0

MFCライブラリを使用している場合は、ドキュメントに記載されているとおり、静的に実行可能ファイルにリンクするか、共有DLLから使用することができます。 AFXDLLビルドでは、共有DLLからそれらを使用します。 – Steeve

答えて

8

MSVC++は、1つの実行可能ファイルのみを展開するプログラマのための最適化を提供します。/MTでビルドして、Cランタイムライブラリと標準C++ライブラリをEXEにリンクすることができます。また、静的MFCライブラリをリンクしてMFCをEXEにリンクすることもできます。小さなLOBアプリでは珍しいことではありません。

いいえ、DLLを使用してコードをモジュール化したり共有したり、ビルド時間を短縮したりすると、正しく動作しません。 MFC(およびCRT)には多くのグローバルステートがあり、CWinAppシングルトンは良い例です。 C++プログラムはJavaやC#のようなVMでは動作しません。の1つは、グローバル状態を格納する責任を負う必要があります。そして、他のモジュールは、そのモジュールのグローバルではなく、そのモジュールのグローバルを使用する必要があります。したがって、MFCのDLLバージョンとDLLバージョンのCおよびC++ランタイムライブラリを使用し、インポートライブラリをリンクする必要があります。

そして、コンパイラに伝える必要があります。そうすれば、ライブラリはそれらのグローバルの適切な場所を探します。それには#defining _AFXDLLが必要です。 "アプリケーションフレームワークは独自のDLLに収められている"のように読んでください。 CRTにも同様のマクロがあります。_DLLです。

これはIDEで完全に自動で行われることに注意してください。プロジェクト>プロパティ>一般、 "MFCの使用"設定。この設定で「Use of MFC of a Shared DLL」を選択すると、自動的に_AFXDLLが定義されます。 CRTと同じです。

+0

これは完全ですか? IDEで自動?Project> Properties> Generalで "Use of MFC"設定で、 "Use using MFC a Shared DLL"を選択しますが、Project> Properties> C/C++で定義された '_AFXDLL ' >プリプロセッサ? – athos

+1

プロジェクトのプロパティシートから少し深く見なければなりません。VS2015では、設定のドロップダウンボタンをクリックして、「継承した値」ボックスに表示します。 C/C++>コマンドライン>すべてのオプションボックスに表示されます。 –

関連する問題