zoukankan      html  css  js  c++  java
  • 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++接口。
  • 相关阅读:
    转:qcow2、raw、vmdk等镜像格式
    openstack配置xen
    透过 Linux 内核看无锁编程
    转:查看进程所消耗的内存
    Ubuntu安装内核源码
    How to mark volume groups as active or inactive
    Failed to access IIS metabase(IIS Exception Problem)
    Android电子书下载:Google Android SDK开发范例大全(第2版)pdf+源码
    几个C++单元测试框架
    JavaScript命名空间namespace的实现方法
  • 原文地址:https://www.cnblogs.com/lanye/p/3459819.html
Copyright © 2011-2022 走看看