2010-01-06 145 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文件,同时创造安装
相关问题