我想爲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更改爲多字節,一切都很好..任何人都知道發生了什麼? 我需要將這個改變集成到一些大的和舊的MFC項目中,所以我絕對需要保留「使用Unicode字符集」標誌。
爲了安全起見,您應該始終在命令行(['/ D'編譯器開關](https://msdn.microsoft.com/en-us/library/)上傳遞全局標誌(如'_AFX_NO_MFC_CONTROLS_IN_DIALOGS') hhzbb5c8.aspx))。 – IInspectable
是的,我在stdafx.h和預處理器定義中都試過,但沒有更改。 – Michael
確定您沒有編譯過其他文件或庫,可能沒有設置此標誌?所有使用MFC的庫和目標文件都必須使用此開關編譯... – xMRi