找回密码
 立即注册
收起左侧

QT如何调用外部DLL中的类中的函数?

5
回复
100
查看
[复制链接]

尚未签到

来源: 2019-8-13 18:32:53 显示全部楼层 |阅读模式
1Qter豆

我现在只有一个外部dll文件**Protocol.dll**,想用QT调用里面的函数,没有.h和.lib。
在网上找了许多方法都不行。

厂家只给了一个**C#**的例程,程序如下:

Protocol.Ax1485 ax1485 = new Protocol.Ax1485();ax1485.OpenPort()

其中**Ax1485**是一个类,**OpenPort()**是该类中的一个函数,我现在想用QT调用这个函数。我现在是这么做的:

typedef int (*Fun)();QLibrary testLib("Protocol.dll"); //已经把dll放在debug中if (testLib.load()){        Fun getObj = (Fun)testLib.resolve("OpenPort");        if (getObj)                {qDebug()<<"getObj";}        else                {QMessageBox::about(NULL,"result","resolve unSuccessfully");}}

load()成功,但是**resolve()**函数总是不成功,不知道为什么?有没有懂的,急求!!!


回复

使用道具 举报

尚未签到

2019-8-13 18:34:07 显示全部楼层
我的代码重发一下:
  1. typedef int (*Fun)();
  2. QLibrary testLib("Protocol.dll"); //已经把dll放在debug中
  3. if (testLib.load())
  4. {
  5.         Fun getObj = (Fun)testLib.resolve("OpenPort");
  6.         if (getObj)
  7.                 {qDebug()<<"getObj";}
  8.         else
  9.                 {QMessageBox::about(NULL,"result","resolve unSuccessfully");}
  10. }
复制代码
回复

使用道具 举报

累计签到:88 天
连续签到:1 天
2019-8-14 15:06:09 显示全部楼层
前几天刚做了一个VS2015 +Qt 环境下的Bartender打印调用,也是只有一个c#的dll.说下我是怎么做的吧
1.新建项目:Visual C++ -->CLR-->类库,项目属性里选择公共语言运行时支持(/Clr),用这个类库去封装C#的dll,也就是根据需要写对应的函数,只不过用C、C++方式去写,函数前面加上extern "C" _declspec(dllexport) ,这样编译完成生成的.lib .dll文件就可以被你的Qt项目直接调用了
回复

使用道具 举报

尚未签到

7 天前 显示全部楼层
zhuxianfei 发表于 2019-8-14 15:06
前几天刚做了一个VS2015 +Qt 环境下的Bartender打印调用,也是只有一个c#的dll.说下我是怎么做的吧
1.新建 ...

不知道函数里面的内容也可以吗?
回复

使用道具 举报

尚未签到

7 天前 显示全部楼层
现在弄好了,重新装了MinGW编译器版的QT,而且从64位换成了32位。

点评

问题解决请及时结帖 ~  详情 回复 发表于 前天 10:04
回复

使用道具 举报

累计签到:503 天
连续签到:3 天
前天 10:04 显示全部楼层
woshigaowei5146 发表于 2019-8-15 15:09
现在弄好了,重新装了MinGW编译器版的QT,而且从64位换成了32位。

问题解决请及时结帖 ~
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册