Qt 库用的是MinGW版本,g++编译器生成,与VC++编译器不是同个体系。所以工程不可以使用testdll.h头文件和testdll.lib引入库文件。
使用了在pro文件添加的方式 失败!
修改.lib为.a的方式 失败
添加静态库 也失败。在绝望时刻 发现了这个方法!!!太好了
对于调用DLL的方法,Qt本身就有相应的类来实现。
#include "dialog.h"
#include <QApplication>
#include <QLibrary>
**typedef int (*func_Add)(int a, int b); //定义函数指针**(一定要与要调用的库里面的参数类型及返回类型一致)
typedef int (*func_Sub)(int a, int b);
typedef int (*func_Mul)(int a, int b);
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
QLibrary mylib("testdll.dll");//testdll.dll的存放路径与.exe一致
if (mylib.load())
{
**//"?Add@Ctestdll@@QAEHHH@Z"等字符串其实就是动态库函数int Add(int a, int b)的变体,请使用微软工具DEPENDS.EXE查看得到**(最重要的一步 从?开始的所有内容都要复制)
func_Add f1 = (func_Add)mylib.resolve("?Add@Ctestdll@@QAEHHH@Z");
func_Sub f2 = (func_Sub)mylib.resolve("?Sub@Ctestdll@@QAEHHH@Z");
func_Mul f3 = (func_Mul)mylib.resolve("?Mul@Ctestdll@@QAEHHH@Z");
int rt = 0;
if (f1 != NULL)
{
rt = f1(10, 12);
}
if (f2 != NULL)
{
rt = f2(10, 12);
}
if (f3 != NULL)
{
rt = f3(10, 12);
}
}`在这里插入代码片`
(完美运行!!!)
Dialog w;
w.show();
return a.exec();
}
致谢:
原博主 http://blog.csdn.net/libaineu2004/article/details/40152253
DEPENDS.EXE 使用方法 https://blog.csdn.net/scythe666/article/details/47165533

1777

被折叠的 条评论
为什么被折叠?



