2010-01-06 141 views
5

我正在創建一個使用Qt創建GUI的C++應用程序。但是,我需要使用依賴於MFC的第三方庫(用於CString的等)。無論如何將MFC添加到我的應用程序允許我使用這個庫或我需要自己重寫它嗎?如何將MFC支持添加到現有的Win32 C++項目?

我看到this question,但它不告訴我如何手動添加MFC到項目。

回答

3

如果庫應用程序需要/返回/使用CStrings它需要與MFC庫鏈接,或將有MFC庫已靜態鏈接。

如果您正在使用Visual Studio,您可以根據需要選中「在靜態/共享庫中使用MFc」,但只要保留當前程序入口點,就不會影響應用程序GUI。

1

如果它只適用於CString(也可能是其他一些實用功能),那麼您可能會更好地搜索替換項。互聯網上有不少漂流物。

例如,這CString實現

0

是的,你可以在你的編譯和鏈接選項中使用MFC。如果你唯一的原因是因爲第三方庫,那麼你可能會想要避免在你自己的代碼中使用任何MFC功能。這樣,如果您更換第三方庫,您也可以關閉MFC。

1

如果您可以找到第三方MFC庫的替代品,將會容易得多。

靜態或動態鏈接的第三方庫需要與用於編譯第三方lib文件的版本完全相同的MFC版本。 MFC類在版本之間不是二進制兼容的,甚至在相同版本的配置(靜態/動態鏈接的MFC,CRT,單/多線程CRT,調試,發行版,X86,X64,MBCS,UNICODE等) 。

如果您使用CString :: LoadString或任何其他訪問MFC模塊狀態的應用程序,它將需要一個全局CWinApp。一個簡單的方法來獲取它是創建一個規則的DLL。將一個添加到您的QT項目將需要您將代碼從退出的入口函數移動到InitInstance和ExitInstance。

0

如果現有Windows程序使用消息循環(而不是MFC使用的單獨事件處理程序),則可以在需要處理該消息循環並覆蓋WindowProc函數的任何級別上創建子類。

例如,我使用了現有的Win32程序,並通過替換子類CStatic的WindowProc將其主窗口嵌入到CStatic圖片窗口中。以前的程序的功能包含在CStatic中,但我可以將其他MFC控件和範例添加到周圍的邊框中。

0

要添加MFC支持的Integra需要以下變化:

  1. 更改應用程序的入口點:
    • 通常的Qt應用程序入口點是主要的,對於MFC應用程序的期望的進入點是WinMain函數/ wWinMain。
  2. 添加所需的MFC依賴項(mfc140d.dll/mfc140.dll等)。
    • 將System32文件夾添加到環境路徑以查找必要的依賴關係。
    • 包所需的dll文件,同時創造安裝
相關問題