zoukankan      html  css  js  c++  java
  • Qt如何调用VS编写的动态链接库(dll文件)

    在最近的开发中需要做了demo,来验证公司的老项目能否在Qt上做重新开发;于是碰到的第一个问题那就是dll文件如何加载了;网上查阅了很多资料,记录一下已成功加载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;
    }

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

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

  • 相关阅读:
    简单测试AF3.0.4
    好玩的Mac键盘
    黑盒测试和白盒测试
    iOS开发之原生二维码生成与扫描
    Swift
    JavaScript null and undefined
    java防止表单重复提交
    Java http post
    Redhat 6.5 x64 下载地址
    Spring 官方下载地址(非Maven)
  • 原文地址:https://www.cnblogs.com/QingYiShouJiuRen/p/11428662.html
Copyright © 2011-2022 走看看