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:\workALL\PrawBz

LIBS+=D:\workALL\PrawBz\TestMax.lib

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

但只支持C的接口,不支持C++接口。
posted @ 2013-12-05 16:26  蓝夜  阅读(1189)  评论(0编辑  收藏  举报