我正在創建一個使用Qt創建GUI的C++應用程序。但是,我需要使用依賴於MFC的第三方庫(用於CString的等)。無論如何將MFC添加到我的應用程序允許我使用這個庫或我需要自己重寫它嗎?如何將MFC支持添加到現有的Win32 C++項目?
我看到this question,但它不告訴我如何手動添加MFC到項目。
我正在創建一個使用Qt創建GUI的C++應用程序。但是,我需要使用依賴於MFC的第三方庫(用於CString的等)。無論如何將MFC添加到我的應用程序允許我使用這個庫或我需要自己重寫它嗎?如何將MFC支持添加到現有的Win32 C++項目?
我看到this question,但它不告訴我如何手動添加MFC到項目。
如果庫應用程序需要/返回/使用CStrings它需要與MFC庫鏈接,或將有MFC庫已靜態鏈接。
如果您正在使用Visual Studio,您可以根據需要選中「在靜態/共享庫中使用MFc」,但只要保留當前程序入口點,就不會影響應用程序GUI。
如果它只適用於CString(也可能是其他一些實用功能),那麼您可能會更好地搜索替換項。互聯網上有不少漂流物。
例如,這CString實現
是的,你可以在你的編譯和鏈接選項中使用MFC。如果你唯一的原因是因爲第三方庫,那麼你可能會想要避免在你自己的代碼中使用任何MFC功能。這樣,如果您更換第三方庫,您也可以關閉MFC。
如果您可以找到第三方MFC庫的替代品,將會容易得多。
靜態或動態鏈接的第三方庫需要與用於編譯第三方lib文件的版本完全相同的MFC版本。 MFC類在版本之間不是二進制兼容的,甚至在相同版本的配置(靜態/動態鏈接的MFC,CRT,單/多線程CRT,調試,發行版,X86,X64,MBCS,UNICODE等) 。
如果您使用CString :: LoadString或任何其他訪問MFC模塊狀態的應用程序,它將需要一個全局CWinApp。一個簡單的方法來獲取它是創建一個規則的DLL。將一個添加到您的QT項目將需要您將代碼從退出的入口函數移動到InitInstance和ExitInstance。
如果現有Windows程序使用消息循環(而不是MFC使用的單獨事件處理程序),則可以在需要處理該消息循環並覆蓋WindowProc函數的任何級別上創建子類。
例如,我使用了現有的Win32程序,並通過替換子類CStatic的WindowProc將其主窗口嵌入到CStatic圖片窗口中。以前的程序的功能包含在CStatic中,但我可以將其他MFC控件和範例添加到周圍的邊框中。
要添加MFC支持的Integra需要以下變化: