如何为现有的Win32 C ++项目添加MFC支持?

时间:2010-01-06 17:55:04

标签: visual-c++ mfc

我正在创建一个使用Qt创建GUI的C ++应用程序。但是,我需要使用依赖于MFC的第三方库(对于CString等)。反正有没有将MFC添加到我的应用程序中以允许我使用这个库,还是我需要自己重写它?

我看到了this question,但它没有告诉我如何手动将MFC添加到项目中。

6 个答案:

答案 0 :(得分:3)

如果库应用程序接受/返回/使用CStrings,它将需要链接到MFC库,或者将MFC库已经静态链接。

如果您使用的是Visual Studio,您可以根据需要选中“在静态/共享库中使用MFc”,只要保留当前的程序入口点,它就不会影响您的应用程序GUI。

答案 1 :(得分:1)

如果它仅用于CString(可能还有其他一些实用程序功能),那么您可能更适合搜索替换。互联网上有很多人浮动。

例如此CString实施

答案 2 :(得分:1)

如果能找到第三方MFC库的替代品会更容易。

静态或动态链接的第三方库需要的MFC版本与用于编译第三方lib文件的版本完全相同。 MFC类在版本之间不是二进制兼容的,并且在配置(静态/动态链接的MFC和CRT,单/多线程CRT,调试,发布,X86,X64,MBCS,UNICODE等)之间甚至不是二进制兼容的版。

如果您使用CString :: LoadString或任何其他访问MFC模块状态的地方,则需要全局CWinApp。一个简单的方法是创建一个常规的DLL。在QT项目中添加一个将要求您将代码从退出的入口函数移动到InitInstance和ExitInstance。

答案 3 :(得分:0)

是的,您可以通过在编译和链接选项中选择它来使用MFC。如果您的唯一原因是因为第三方库,那么您可能希望避免在您自己的代码中使用任何MFC功能。这样,如果您更换第三方库,也可以关闭MFC。

答案 4 :(得分:0)

如果现有的Windows程序使用消息循环(而不是MFC使用的单独的事件处理程序),则可以在需要处理该消息循环的任何级别子类化窗口并覆盖WindowProc函数。

例如,我使用现有的Win32程序,并通过替换子类CStatic的WindowProc将其主窗口嵌入到CStatic图片窗口中。之前程序的功能包含在CStatic中,但我可以将其他MFC控件和范例添加到周围的边框中。

答案 5 :(得分:0)

要向Integra添加MFC支持,需要进行以下更改:

  1. 更改应用入口点:
    • 通常qt应用程序入口点是主要的,对于MFC应用程序,预期的入口点是WinMain / wWinMain。
  2. 添加所需的MFC依赖项(mfc140d.dll / mfc140.dll等)。
    • 将System32文件夹添加到环境路径以查找必要的依赖项。
    • 创建安装程序时打包所需的dll