VS2017编写MFC库以及使用Qt调用MFC库方法

本文详细介绍如何使用Qt调用MFC动态链接库,包括在VS2017中创建MFC库,解决编码问题,及避免常见陷阱。提供源码下载,适合跨平台开发者参考。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

若该文为原创文章,未经允许不得转载
原博主博客地址:https://blog.csdn.net/qq21497936
原博主博客导航:https://blog.csdn.net/qq21497936/article/details/102478062
本文章博客地址:https://blog.csdn.net/qq21497936/article/details/95052025
各位读者,知识无穷而人力有穷,要么改需求,要么找专业人士,要么自己研究

红胖子(红模仿)的博文大全:开发技术集合(包含Qt实用技术、树莓派、三维、OpenCV、OpenGL、ffmpeg、OSG、单片机、软硬结合等等)持续更新中…(点击传送门)

其他(编程相关)(点击传送门)

项目实战:Qt编译Qt库以及使用C#调用Qt库,并实现C#集成Qt的tcp客户端

VS2017编写MFC库以及使用Qt调用MFC库方法

VS2017编写纯C库以及使用C#调用C库方法

Qt实用技巧:VS2017编写纯C库以及使用Qt调用C库方法

关于 C#调用C库Dll,有回调函数时,只执行一次回调函数就直接挂掉 的解决方法

关于 C#调用一个C/C++dll库运行时实现多个应用(静态变量区分) 的解决方法

关于 C#调用c库,将C#的byte[]传入C库的方法和将C库的char*向上传入C#的回调函数byte[] 的方法

 

前言

       一些控件MFC操作是非常合适的,先用MFC开发成dll,然后使用Qt调用。

 

Demo

        下载地址:https://download.csdn.net/download/qq21497936/11295694

 

使用VS7建立MFC动态链接库

前提:需要安装VS中的MFC环境

       (注意:已安装可以忽略该步。)

       进入VS的检查更新:

      

      

      

       添加配置安装:

       

       安装中:

       

       等待安装完成:

        

建立MFC动态链接库

        

        

        

编写测试函数

        

        

动态库所需要的头文件、编译库lib和运行库dll

       (注意:此方式,在QtCreator中失败)

        

        

 

使用QtCreator调用MFC动态连接库

脚本

       将dll拷贝到工程目录,开发过程中,为方便调试,使用脚本:

        

       请参照

《Qt实用技巧:win将ffmpeg、opengl、osg等各种库封装成qt模块,运行需要dll,增加自动拷贝运行库到exe目录执行脚本》

            https://blog.csdn.net/qq21497936/article/details/93745527

代码

        

运行结果

        

 

关于Qt给MFC传递中文的问题

        MFC CString和QT QString都采用unicode编码;而MFC中的char *采用GBK编码,QT中的char *采用UTF-8编码,这里关于字符的编码,有个规律就是和源码文件保存的编一致。

       所以Qt给MFC传递char*时,需要进行编码转换,如下:

bool OptPptManager::openFile(QString fullPath)
{
    bool ret = true;

    // MFC与QT对char *的编码不同
    QTextCodec * pCodec = QTextCodec::codecForName("GBK");
    QByteArray data = pCodec->fromUnicode(fullPath);

    char * p = data.data();
    if(0 != _pOpenPpt(p))
    {
        ret = false;
    }
    return ret;
}

     

 

入坑

入坑一:用包含头文件、lib和dll的方式,出现头文件错误

原因:

       MFC到处的dll的问文件中,将头文件包含到qtcreator的qt工程中,无法识别,导致语法错误。

解决方法:

       使用QLibrary显式调用。

入坑二:抽取函数失败

       

原因:

        定义MFC库的时候没有在.def文件中声明

解决方法:

      

入坑三:传递中文的ppt路径挂掉(2019年7月10日补充)

原因:

       MFC与Qt对字符的编码不同。

解决方法:

       

 

补充

当前测试AFX_MANAGE_STATE(AfxGetStaticModuleState())区别

        

 

原博主博客地址:https://blog.csdn.net/qq21497936
原博主博客导航:https://blog.csdn.net/qq21497936/article/details/102478062
本文章博客地址:https://blog.csdn.net/qq21497936/article/details/95052025

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

长沙红胖子Qt(技术Q群4597637)

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值