我正在创建一个使用Qt创建GUI的C ++应用程序。但是,我需要使用依赖于MFC的第三方库(对于CString等)。反正有没有将MFC添加到我的应用程序中以允许我使用这个库,还是我需要自己重写它?
我看到了this question,但它没有告诉我如何手动将MFC添加到项目中。
答案 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支持,需要进行以下更改: