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

Posted

技术标签:

【中文标题】如何将 MFC 支持添加到现有的 Win32 C++ 项目?【英文标题】:How to add MFC support to existing Win32 C++ Project? 【发布时间】:2010-01-06 17:55:04 【问题描述】:

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

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

【问题讨论】:

【参考方案1】:

如果库应用采用/返回/使用 CString,则需要与 MFC 库链接,或者 MFC 库已经静态链接。

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

【讨论】:

【参考方案2】:

如果它仅用于 CString(可能还有其他一些实用功能),您可能会更好地搜索替换。网上流传着不少。

例如这个CString 实现

【讨论】:

【参考方案3】:

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

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

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

【讨论】:

【参考方案4】:

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

【讨论】:

【参考方案5】:

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

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

【讨论】:

【参考方案6】:

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

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

【讨论】:

以上是关于如何将 MFC 支持添加到现有的 Win32 C++ 项目?的主要内容,如果未能解决你的问题,请参考以下文章

如何将人行横道集成到现有的离子目标c项目中

data.table 连接然后将列添加到现有的 data.frame 而无需重新复制

如何在 Visual C++ 2008 中将 MFC 应用程序项目添加到 Win32 应用程序项目

如何将多维数组添加到现有的 Spark DataFrame

如何将 Mailchimp 添加到现有的注册框

如何将新行添加到现有的 QTablewidget