网上看到很多文章写调用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
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 }
在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 }
然后把生成的“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++接口。