2012-06-29 61 views
0

我想實現的是:如何從非mfc項目的靜態庫中使用MFC對話框類?

我有一個很大的現有項目是非mfc。

我創建了一個靜態庫,其中定義了cdialogs。

我已經讀過,可以在非mfc應用程序中使用這個庫,但我不知道如何。

我讀了很多關於mfc入口點和初始化的信息,這些信息發生在afxwinmain(),InitInstance,run()等等。所以,顯然,這些東西從來都不會在我的應用程序中完成。

任何人都可以提出一個方法來使用我的lib中的cdialogs在主應用程序?

+0

嘗試將所有必要的初始化設置放入MFC庫中的導出包裝過程中,例如將其稱爲'void InitMFC()',然後從非MFC主項目中調用它。如果可能的話(在靜態庫中執行init),那麼你的主項目可以初始化MFC而不需要知道任何關於它的信息。 – sashoalm

+0

所以,你的意思是,我應該導出我自己的函數,初始化這些東西,通常在afxwinmain()中完成。這只是一個假設,或者你知道嗎,它是這樣工作的嗎? –

+0

只是一個假設。但是它不應該太難測試,你可以創建一個靜態庫來初始化MFC,創建一個CDialog,並調用它的DoModal(),所有這些都在一個導出的函數中,以及一個示例非MFC的Win32項目鏈接反對它並調用該函數。你如何鏈接MFC與你的靜態庫?它是作爲DLL鏈接還是靜態鏈接? – sashoalm

回答

0

感謝@satuon,您的假設工作至今。

我實際上將afxwinmain()函數內的mfc代碼複製到我的靜態庫(在我的例子中是一個cwinapp方法)中的一個函數中。

在我的主應用程序中,我將cwinapp對象聲明爲external。然後,我只需調用theApp.InitMFC()並且它可以工作。

例子:

extern MyCWinApp theApp; 
theApp.InitMFC(); 

在我的情況的,theApp是全球性的。