MFCプロジェクトに_AFX_NO_MFC_CONTROLS_IN_DIALOGSを定義したいとします。この定義は、実行可能なサイズをかなり減らすことになっています。詳細は、https://blogs.msdn.microsoft.com/vcblog/2012/02/06/reducing-the-size-of-statically-linked-mfc-applications-in-vc11/を参照してください。MFCアプリケーションサイズを小さくする
ウィザードを使用して「Mfcアプリケーション」を作成しました。私は「静的ライブラリでMFCを使用する」以外のすべてのデフォルトオプションを保持していました(これは私にとって必須です)。
この時点で、プロジェクトがビルドされます。
その後、私はSTDAFX.Hファイルに次の行を追加します。この時点で #define _AFX_NO_MFC_CONTROLS_IN_DIALOGS
、私はいくつかのリンカエラーを取得:
1>uafxcwd.lib(afxctrlcontainer2.obj) : error LNK2005: "void __cdecl AfxRegisterMFCCtrlClasses(void)" ([email protected]@YAXXZ) already defined in afxnmcdd.lib(afxctrlcontainer2.obj)
1>uafxcwd.lib(afxctrlcontainer2.obj) : error LNK2005: "protected: void __thiscall CMFCControlContainer::PreUnsubclassControl(class CWnd *)" ([email protected]@@[email protected]@@Z) already defined in afxnmcdd.lib(afxctrlcontainer2.obj)
1>uafxcwd.lib(afxctrlcontainer2.obj) : error LNK2005: "public: int __thiscall CMFCControlContainer::SubclassDlgControls(void)" ([email protected]@@QAEHXZ) already defined in afxnmcdd.lib(afxctrlcontainer2.obj)
しかし、私はプロジェクトの設定に行けば文字セットをUnicodeからMulti-Byteに変更すると、すべてがうまくいきます。何が起こっているのか誰も知っていますか? この変更を大規模なものと古いもののMFCプロジェクトに統合する必要があるため、「Unicode文字セットを使用する」フラグを必ず保持する必要があります。
コマンドライン([''/D'コンパイラスイッチ)(https://msdn.microsoft.com/en-us/library/)にグローバルフラグ( '_AFX_NO_MFC_CONTROLS_IN_DIALOGS'など)を渡す必要があります。 hhzbb5c8.aspx))。 – IInspectable
ええ、私はstdafx.hとプリプロセッサ定義の両方で試しましたが、変更はありません。 – Michael
このフラグが設定されていない他のファイルやライブラリはコンパイルされていないことを確認してください。 MFCを使用するすべてのLibとオブジェクトファイルは、このスイッチでコンパイルする必要があります。 – xMRi