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

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

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

尚未签到

来源: 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()**函数总是不成功,不知道为什么?有没有懂的,急求!!!


最佳答案

查看完整内容

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

使用道具 举报

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

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

使用道具 举报

尚未签到

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. }
复制代码
回复

使用道具 举报

累计签到:118 天
连续签到:2 天
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项目直接调用了
参与人数 1人气 +2 收起 理由
woshigaowei5146 + 2 对我帮助很大!

查看全部评分总评分 : 人气 +2

回复

使用道具 举报

尚未签到

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

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

使用道具 举报

尚未签到

2019-8-15 15:09:31 显示全部楼层
现在弄好了,重新装了MinGW编译器版的QT,而且从64位换成了32位。

点评

问题解决请及时结帖 ~  详情 回复 发表于 2019-8-20 10:04
回复

使用道具 举报

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

公告
可以关注我们的微信公众号yafeilinux_friends获取最新动态,或者加入QQ会员群进行交流:190741849、186601429(已满) 我知道了