我正在创建一个使用Qt创建GUI的C++应用程序。但是,我需要使用依赖于MFC的第三方库(用于CString的等)。无论如何将MFC添加到我的应用程序允许我使用这个库或我需要自己重写它吗?如何将MFC支持添加到现有的Win32 C++项目?
我看到this question,但它不告诉我如何手动添加MFC到项目。
我正在创建一个使用Qt创建GUI的C++应用程序。但是,我需要使用依赖于MFC的第三方库(用于CString的等)。无论如何将MFC添加到我的应用程序允许我使用这个库或我需要自己重写它吗?如何将MFC支持添加到现有的Win32 C++项目?
我看到this question,但它不告诉我如何手动添加MFC到项目。
如果库应用程序需要/返回/使用CStrings它需要与MFC库链接,或将有MFC库已静态链接。
如果您正在使用Visual Studio,您可以根据需要选中“在静态/共享库中使用MFc”,但只要保留当前程序入口点,就不会影响应用程序GUI。
如果它只适用于CString(也可能是其他一些实用功能),那么您可能会更好地搜索替换项。互联网上有不少漂流物。
例如,这CString实现
是的,你可以在你的编译和链接选项中使用MFC。如果你唯一的原因是因为第三方库,那么你可能会想要避免在你自己的代码中使用任何MFC功能。这样,如果您更换第三方库,您也可以关闭MFC。
如果您可以找到第三方MFC库的替代品,将会容易得多。
静态或动态链接的第三方库需要与用于编译第三方lib文件的版本完全相同的MFC版本。 MFC类在版本之间不是二进制兼容的,甚至在相同版本的配置(静态/动态链接的MFC,CRT,单/多线程CRT,调试,发行版,X86,X64,MBCS,UNICODE等) 。
如果您使用CString :: LoadString或任何其他访问MFC模块状态的应用程序,它将需要一个全局CWinApp。一个简单的方法来获取它是创建一个规则的DLL。将一个添加到您的QT项目将需要您将代码从退出的入口函数移动到InitInstance和ExitInstance。
如果现有Windows程序使用消息循环(而不是MFC使用的单独事件处理程序),则可以在需要处理该消息循环并覆盖WindowProc函数的任何级别上创建子类。
例如,我使用了现有的Win32程序,并通过替换子类CStatic的WindowProc将其主窗口嵌入到CStatic图片窗口中。以前的程序的功能包含在CStatic中,但我可以将其他MFC控件和范例添加到周围的边框中。
要添加MFC支持的Integra需要以下变化: