web-dev-qa-db-ja.com

エラー#define _AFXDLLを使用するか、プロジェクトプロパティを変更した後でも/ MD [d]を使用しないでください

Visual Studio 2011でWin32プロジェクトに取り組んでいます。afx.hまたはafxwin.hをインクルードすると、MFCエラーが生成されます。これを解決するために、[プロジェクトプロパティ]タブで次の変更を行いました。1)MFCの使用:共有DLL 2)C++->コード生成->ランタイムライブラリ->マルチスレッドデバッグDLL(/ MDd)

それでも、ソリューションをビルドすると次のエラーが発生します:

1>C:\Program Files (x86)\Microsoft Visual Studio 11.0\vc\atlmfc\include\afx.h(24): fatal error C1189: #error : Building MFC application with /MD[d] (CRT dll version) requires MFC shared dll version. Please #define _AFXDLL or do not use /MD[d]

私の質問は、Win32プロジェクトがMFCエラーを生成している理由と、このエラーをどのように削除する必要があるかということです。

38
SayaliK

Visual Studio 2011では、これは私のために働いた:

_Project -> "project" Properties -> Configuration Properties -> C/C++ -> Advanced -> Show Includes:_YES(/showIncludes)

_Project -> "project" Properties -> Configuration Properties -> General -> Project Defaults -> Use of MFC :__Use MFC in a shared DLL_

38

私は同じ問題を抱えていましたが、デバッグ構成とリリース構成の両方に「共有DLLでMFCを使用」フラグを設定する必要があることに気付いたときにのみ解決しました(デバッグ用にのみ設定していました)。

12
Chris Kennedy

私の経験では、2つのステップがあります。 STATICリンクが必要であると仮定します。a) "静的ライブラリでMFCを使用" b)追加:stdafx.hの#define _AFXDLL 1

vS 2012で動作します

6
ingconti

私は同様の問題に苦労しました。私の場合、個々のcppファイルに添付された設定が原因でした。プリプロセッサシンボルが含まれていたため、実際にはプリプロセッサシンボルを使用するプロジェクト(または小道具)レベルの設定をブロックしていました。

Vcxprojにファイルレベルの設定があるかどうかを確認してください。行う場合は、それらがプロジェクトレベルの設定と等しいかどうかを確認します。存在する場合は、安全に削除できます。違いがある場合は、それを整理する必要があります。

通常、CPPファイルレベルの設定は空にする必要があります(必要な場合は例外があります)が、誤って追加するのは非常に簡単です。

1
Vojtěch Fried

私にとっては、ターゲットをx64からx86に変更する必要がありました。

0
Kevin S. Miller
  1. 開いた

    プロジェクトプロパティ->構成プロパティ-> C/C++->コード生成->ランタイムライブラリ

  2. [ランタイムライブラリ]セクションで[マルチスレッド(/ MT)]を選択します。

これによりエラーが削除されます。楽しい。

0
Kaushik Dutta

プロジェクトの構成を「共有DLLでMFCを使用」に正しく設定しなかったため、このエラーが発生していました。私の間違いは、このオプションをReleaseモードでのみ設定し、Debugモードでコンパイルしたときにこのエラーが発生したことです。デバッグモードとリリースモードの両方の構成に設定を適用すると、問題が解決しました。

設定は次のとおりです。

プロジェクト->「プロジェクト」プロパティ->構成プロパティ->一般->プロジェクトのデフォルト-> MFCの使用:共有DLLでMFCを使用

0
Ahmed