2012-06-29 38 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是全球性的。