若该文为原创文章,未经允许不得转载
原博主博客地址: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客户端》
《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