• Qt显示调用vs中的dll


    网上看到很多文章写调用vc的dll,但我尝试了总是出问题,下面结合参考别人的文章,实现了Qt显示调用vs中c接口的dll。

    具体直接上代码:

    vs中的代码:

    TMax.h:

     1 #ifdef TMAX
     2 #define TMax_API  _declspec(dllexport)
     3 #else
     4 #define TMax_API  _declspec(dllimport)
     5 #endif
     6 
     7 #ifndef  _TMAX_
     8 #define _TMAX_
     9 
    10 #include <iostream>
    11 using namespace std;
    12 
    13 #ifdef __cplusplus
    14 extern "C" {
    15 #endif
    16 
    17 int TMax_API Tmax(int x,int y);
    18 
    19 #ifdef __cplusplus
    20 }
    21 #endif
    22 
    23 #endif
    View Code

    TMax.cpp:

     1 #define TMAX
     2 #include "TMax.h"
     3 int TMax_API Tmax(int x,int y)
     4 {
     5     if (x>y)
     6     {
     7         return x;
     8     }
     9     else
    10         return y;
    11 }
    View Code

    在Qt建立一个工程,然后在主函数调用dll,具体代码为:

     1 #include <QtGui/QApplication>
     2 #include <QDebug>
     3 #include <QLibrary>
     4 
     5 int main(int argc, char *argv[])
     6 {
     7     QApplication a(argc, argv);
     8 
     9     QLibrary myDll("TestMax.dll");
    10     if(!myDll.load())
    11     {
    12         qDebug()<<"load dll error";
    13     }
    14     else
    15     {
    16         qDebug()<<"load dll suncess";
    17         typedef int(*FUN)(int,int);
    18         FUN myAdd=(FUN)myDll.resolve("Tmax");
    19         if(myAdd)
    20         {
    21             qDebug()<<myAdd(1,10);
    22         }
    23         else
    24             qDebug()<<"get function address error";
    25     }
    26     if(myDll.isLoaded())
    27         myDll.unload();
    28 
    29     return a.exec();
    30 }
    View Code

    然后把生成的“TestMax.dll”文件拷贝到Qt生成exe的地方,而不是放在工程的源代码里就可以调用成功了,

    具体效果图为:

    关于隐示调用,至今还没调用成功。

    如果手上有C++的dll的时候,在QT中无法调用,可以通过“Dll函数查看器”这个软件查看带有参数的dll函数即可,或者说

    可以在VS中用C的接口封装一下这个C++的dll,然后只需要把二个dll一起拷贝过去,但是只是加载一个C接口的dll即可使用。

    时间:2014/03/12

    刚刚测试通过显示调用程序,

    dll同上,不重复写了。

    在pro文件中,添加头文件路径及其lib文件,

    INCLUDEPATH+=D:workALLPrawBz
    
    
    LIBS+=D:workALLPrawBzTestMax.lib

    在main文件里添加头文件,然后把dll拷贝到生成软件目录下。
    直接调用运行即可。

    但只支持C的接口,不支持C++接口。
  • 相关阅读:
    Django orm self 自关联表
    postgresql数据库导入导出
    celery在项目中的使用
    P3405 [USACO16DEC]Cities and States S 【map使用】
    P1030 求先序排列 【已知中序后序求先序】
    P1305 新二叉树 【寻找根节点进行先序遍历】
    P1229 遍历问题 【已知先序后序求中序种类】
    P1364 医院设置 【带权值的树的重心】
    P3884 [JLOI2009]二叉树问题 【离线tarjan或数的向上遍历】
    P1827 [USACO3.4]美国血统 American Heritage【树的遍历】
  • 原文地址:https://www.cnblogs.com/lanye/p/3459819.html
Copyright © 2020-2023  润新知