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

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

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

【问题讨论】:

    标签: visual-c++ 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,需要进行以下更改:

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

              【讨论】:

                猜你喜欢
                • 2011-04-25
                • 1970-01-01
                • 1970-01-01
                • 2011-07-07
                • 2011-01-10
                • 2016-10-05
                • 1970-01-01
                • 2017-03-04
                • 2015-12-27
                相关资源
                最近更新 更多