• Qt调用C的DLL


    在QT开发时,有里需要调用已经写好的DLL来实现一些功能,那要如何调用呢?我们先建一个DLL。

    在VS2012中建立C++ WIN32的DLL空项目DllTest,然后添加头文件和CPP文件,具体如下

    Calculate.h

    #ifdef __cplusplus   
    #define EXPORT extern "C" __declspec (dllexport)   
    #else   
    #define EXPORT __declspec (dllexport)   
    #endif   
    
    EXPORT int  sum(int a,int b);   
    

    Calculate.cpp

    #include "windows.h"   
    #include "Calculate.h"
    
    
    int WINAPI DllMain(_In_ HANDLE _HDllHandle, _In_ DWORD _Reason, _In_opt_ LPVOID _Reserved)   
    {   
        return TRUE;   
    }  
    
    EXPORT int sum(int a,int b)  
    {   
        return a+b;   
    }  
    编译后得到DllTest.dll,使用DLL查看工具,查看导出的DLL是否OK,查看结果如下。


    可以看到sum函数已经导出到DLL了,下面是在QT中的调用。

    在VS2012中建立一个QT的控制台项目,并将DllTest.dll复制到项目下(与main.cpp同级目录)。然后在main.cpp中添加如下代码

    main.cpp

    #include <QLibrary>
    #include <QtDebug>
    
    typedef int (*SumFunction)(int,int);
    
    int main(int argc, char *argv[])
    {
    
        QLibrary library("DllTest");
        library.load();
        if (!library.isLoaded())
        {
            qDebug()<<"Cannot load library.";
            return 0;
        }
    
        SumFunction sum=(SumFunction)library.resolve("sum");
        if (sum)
        {
            qDebug()<<"sum="<<sum(1,9);
        }
    
        return 0;
    }
    

    下面是运行结果


    利用QLibrary来载入dll,同时定义一个函数指针SumFunction来接收sum函数,最后实现调用。


  • 相关阅读:
    style实例
    背景小实例
    html表单与输入实例
    列表小知识
    表格的使用
    框架的奥秘
    链接那档子事
    判断网络是否连通
    Python3编码规范
    CentOS 7 安装 Docker-Compose
  • 原文地址:https://www.cnblogs.com/sparkleDai/p/7605052.html
Copyright © 2020-2023  润新知