首页 > 其他分享 >Qt如何调用VS编写的动态链接库(dll文件)

Qt如何调用VS编写的动态链接库(dll文件)

时间:2024-01-20 21:33:56浏览次数:31  
标签:文件 调用 Qt int MYDLL dll VS include

 

下面是我在VS编译器上写的一个简单的dll文件,关于dll文件如何编写,我就不再赘述了。

.h文件

#ifndef  _MYDLL_H
#define _MYDLL_H

#ifdef MYDLL_EXPORTS
#define  MYDLL_API __declspec(dllexport)
#else
#define  MYDLL_API __declspec(dllimport)
#endif 

extern "C" MYDLL_API int add(int a, int b);

#endif

.cpp文件

#include "mydll.h"

extern "C" MYDLL_API int add(int a, int b)
{
    return (a + b);
}

编译成功后,会得到下面三个文件,mydll.h、MyDll.lib、MyDll.dll

然后打开Qt创建一个项目;我是把这三个文件全部拷贝到了运行工作目录;如下所示:

 

下面介绍一下Qt如何隐式调用dll文件:

打开.Pro文件

 

在工程文件中包含.h文件的路径以及库文件的路径即可,下面就是如何调用库文件中的函数了:

#include <QDebug>
#include <QLibrary>
#include "mydll.h"  //包含头文件


int main()
{
    qDebug() << add(10, 20);
    return 0;
}

上述是隐式调用库文件的函数,还有一种显示调用方法,如下所示:

#include <QDebug>
#include <QLibrary>
#include "mydll.h"  //包含头文件

typedef int(*pFun)(int, int);

int main()
{
    QLibrary mydll("MyDll.dll");
    if(!mydll.load())
    {
        qDebug() << "load dll error";
    }
    else
    {
        qDebug() << "load dll success";
        pFun myAdd = (pFun)mydll.resolve("add");
        if(myAdd){
            qDebug() << myAdd(1, 10);
        }
        else
        {
          qDebug() << "get Function address error";
        }

    }
    if(mydll.isLoaded())
    {
        mydll.unload();
    }

    return 0;
}

相较而言,隐式调用比显示调用更加简洁,通常都是选择隐式调用更为合适。

当然,在配置库文件的路径时,也可以选择用相对路径的方式,如下所示:

 

 

 

 

转: https://www.cnblogs.com/TechNomad/p/11428662.html

 

标签:文件,调用,Qt,int,MYDLL,dll,VS,include
From: https://www.cnblogs.com/fps2tao/p/17977170

相关文章

  • WSL2+Ubuntu22.04+Vscode 虚拟环境安装
    1.WSL2+Ubuntu22.04+Vscode虚拟环境安装详细攻略WIN11+WSL2+Ubuntu22.04+CUDA+MINICONDA3+Pytorch安装踩坑总结,手把手教学,看不会你打我1.1先决配置1.2安装命令官网https://learn.microsoft.com/zh-cn/windows/wsl/basic-commandswsl--install--no-distributio......
  • Vscode打不开的解决办法
    最近存放数据的机械硬盘突然坏了,基本上所有的数据的软件都没了,于是换了个盘开始了重新装软件之旅。VScode和VisualStudio必不可少,因此先开始装这两个软件。在使用卸载软件把VScode卸载并清理注册表后,重新下载安装发现打不开,就上网寻找各种解决办法。主要解决办法有以下5种,1、......
  • vscode netcore运行配置
    launch.json{  "version":"0.2.0",  "configurations":[   {    "name":".NETCoreLaunch(web)",    "type":"coreclr",    "request":"launch&qu......
  • Visual Studio + QT环境 界面中文乱码问题及解决
    情况:  头文件开头加入预编译语句#pragmaexecution_character_set("utf-8") 效果:  参考:VS2019+qt解决中文乱码问题  ......
  • 【github】Mac系统中,如何项目clone(1.通过vscode链接github,2.进行clone)
     1.通过vscode打开一个空文件夹(目录:确认想要放置新项目的目录)2.进行vscode和github的链接1)参考下方网址1-6步,生成sshkey,登录到github,检测SSHkeyhttps://cloud.tencent.com/developer/article/1952247,网址中有效内容如下:1.检查SSHkey是否存在在Mac终端输入:ls-a~/.......
  • C++ Qt开发:Charts与数据库组件联动
    Qt是一个跨平台C++图形界面开发库,利用Qt可以快速开发跨平台窗体应用程序,在Qt中我们可以通过拖拽的方式将不同组件放到指定的位置,实现图形化开发极大的方便了开发效率,本章将重点介绍Charts组件与QSql数据库组件的常用方法及灵活运用。在之前的文章中详细介绍了关于QCharts绘图组件......
  • qt和java的socket连接
    事先说明qt为客户端(发出请求)java为服务端(处理请求)关于qt的客户端来说我们大体上要完成三个需求,即请求连接,发送,接收请求连接如果想使用qt写socket程序,首先需要在.pro文件中添加QT+=network;(非常非常重要)接收然后我们就可以在代码中使用QT的网络库了,socket涉及到的函数库......
  • dllhost.exe
    什么是dllhost.exe?Dllhost.exe是一个合法的Windows进程,负责托管和执行DLL(动态链接库)文件。DLL文件包含多个程序可以同时使用的代码和数据,这有助于提高效率并减少系统中的冗余。dllhost.exe进程是Windows操作系统的重要组成部分,用于运行COM(组件对象模型)对象。COM对象是......
  • 文心一言 VS 讯飞星火 VS chatgpt (182)-- 算法导论13.4 6题
    六、用go语言,Skelton和Baron教授担心在RB-DELETE-FIXUP的情况1开始时,结点x.p可能不是黑色的。如果这两位教授是对的,则第5~6行就是错的。证明:x.p在情况1开始时必是黑色的,从而说明这两位教授没有担心的必要。文心一言:首先,我们需要理解RB-DELETE-FIXUP的情况1开始时,节点x.p......
  • Qt - 打包程序:含QWidget和QML
    简介项目完成之后,就需要打包发布,即可直接将打包程序拷贝到其他设备上运行 打包QWidget项目 1、以win11为例,在开始菜单中找到Qt,看到下图红框中的终端2、选择自己需要使用的构建套件版本,其中MinGW、MSVC、32bit,64bit这几个点是需要看清楚的否则打包后运行exe会出现0xc000......