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

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

若该文为原创文章,未经允许不得转载

原博主博客地址: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


相关文章
|
7月前
QT中HASH函数方法
QT中HASH函数方法
205 0
|
5月前
|
Linux iOS开发 开发者
Qt问题(二):无法定位程序输入点于动态链接库
动态链接库(Dynamic Link Library,简称DLL)是一种可执行文件格式,常见于Windows操作系统中,而在Linux和macOS等其他操作系统中,相似的概念通常被称为共享库(Shared Library)。动态链接库允许程序在运行时加载所需的代码和数据,而不是在编译时静态链接到应用程序中。这种方式带来了几个重要的优点:
526 3
|
5月前
|
Oracle 关系型数据库 Linux
讲解linux下的Qt如何编译oracle的驱动库libqsqloci.so
通过这一连串的步骤,可以专业且有效地在Linux下为Qt编译Oracle驱动库 `libqsqloci.so`,使得Qt应用能够通过OCI与Oracle数据库进行交互。这些步骤适用于具备一定Linux和Qt经验的开发者,并且能够为需要使用Qt开发数据库应用的专业人士提供指导。
181 1
讲解linux下的Qt如何编译oracle的驱动库libqsqloci.so
|
4月前
|
API 开发工具 C语言
C语言与图形界面:利用GTK+、Qt等库创建GUI应用。
C语言与图形界面:利用GTK+、Qt等库创建GUI应用。
248 0
|
6月前
|
存储 编解码 Ubuntu
【QT】linux下alsa库的移植和QT中音视频的处理&笔记
【QT】linux下alsa库的移植和QT中音视频的处理&笔记
|
6月前
Cmake构建Qt项目链接glog库
Cmake构建Qt项目链接glog库
|
7月前
|
编解码
qt中使用dll库的方法
qt中使用dll库的方法
109 2
|
7月前
|
存储
Qt更新组件出现(“要继续此操作,至少需要一个有效且已启用的储存库”)
Qt更新组件出现(“要继续此操作,至少需要一个有效且已启用的储存库”)
401 0
Qt更新组件出现(“要继续此操作,至少需要一个有效且已启用的储存库”)
|
7月前
|
编译器
正点原子IMX6ULL-安装交叉编译器、编译tslib触摸屏库、编译arm环境qt源代码
正点原子IMX6ULL-安装交叉编译器、编译tslib触摸屏库、编译arm环境qt源代码
246 0
|
7月前
|
XML 网络安全 数据库
【Qt 安装】安装Qt源码所需的前置库
【Qt 安装】安装Qt源码所需的前置库
94 0