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

 

下面是我在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

 

posted @ 2024-01-20 21:27  与f  阅读(69)  评论(0编辑  收藏  举报