社区
Qt
帖子详情
Qt 调用 DLL功能函数
addfourliu
2011-11-08 02:32:50
在网上找了个Qt 调用 DLL功能函数的小例子,自己执行了下,加载.dll可以成功,但是dll里面的功能函数却不能调用,不知道为什么?有人遇到这种问题木有啊?
...全文
134
10
打赏
收藏
Qt 调用 DLL功能函数
在网上找了个Qt 调用 DLL功能函数的小例子,自己执行了下,加载.dll可以成功,但是dll里面的功能函数却不能调用,不知道为什么?有人遇到这种问题木有啊?
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
10 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
addfourliu
2011-11-08
打赏
举报
回复
[Quote=引用 9 楼 dongdongnidenao 的回复:]
一般加载dll分为动态和静态两种。两种都需要有头文件,用于向被加载的程序说明都有什么可以使用的文件。就像一个清单一样。
动态加载如果在windows API中就需要用到LoadLibrary,GetProcAddress和FreeLibrary等一系列的函数了。LoadLibrary作用是加载dll,GetProcAddress作用是获取你知道名字的函数,FreeLibrary字面上就能理……
[/Quote]
谢谢解释啊,我搞错啦,我的函数忘了导出了,晕死。。。
dongdongnidenao
2011-11-08
打赏
举报
回复
一般加载dll分为动态和静态两种。两种都需要有头文件,用于向被加载的程序说明都有什么可以使用的文件。就像一个清单一样。
动态加载如果在windows API中就需要用到LoadLibrary,GetProcAddress和FreeLibrary等一系列的函数了。LoadLibrary作用是加载dll,GetProcAddress作用是获取你知道名字的函数,FreeLibrary字面上就能理解了,就是不需要Library的时候,释放掉。
静态加载不需要自己调用这些函数,这些函数的实际实现都在.lib文件中,这个与链接时候需要目标文件相同,有了它基本你要使用函数时候,调用就好了。
现在感觉你的函数是一个class的member function,会有name mangling。所以建议简单起见,用静态加载。
这些都是从windows API角度看的,我也是刚刚接触qt呵呵。
addfourliu
2011-11-08
打赏
举报
回复
[Quote=引用 5 楼 dongdongnidenao 的回复:]
运行时错误了,应该是name mangling的问题,因为是C++的类的成员函数。要不你静态加载dll算了呵呵。
[/Quote]
弱弱的问一下,加载插件和动态加载dll有什么区别啊?静态加载dll又是怎么回事?
addfourliu
2011-11-08
打赏
举报
回复
[Quote=引用 6 楼 wwwcs59 的回复:]
getString函数原型是什么?
[/Quote]
QString getString(){ return "OK";}
法尔我给他
2011-11-08
打赏
举报
回复
getString函数原型是什么?
dongdongnidenao
2011-11-08
打赏
举报
回复
运行时错误了,应该是name mangling的问题,因为是C++的类的成员函数。要不你静态加载dll算了呵呵。
addfourliu
2011-11-08
打赏
举报
回复
[Quote=引用 3 楼 dongdongnidenao 的回复:]
Fun open = (Fun) mylib.resolve("getString");
这个是得到getString()的函数指针么?
如果是的话,看来函数指针没有获取成功啊。
[/Quote]
对啊,上面有定义:
typedef QString (*Fun)(); //定义函数指针,以备调用
是没有获取成功,不知道为啥?
dongdongnidenao
2011-11-08
打赏
举报
回复
Fun open = (Fun) mylib.resolve("getString");
这个是得到getString()的函数指针么?
如果是的话,看来函数指针没有获取成功啊。
addfourliu
2011-11-08
打赏
举报
回复
[Quote=引用 1 楼 loaden 的回复:]
不能调用的根据是什么?
没有理由这样。
[/Quote]
dll中有一个方法是getString(),
Fun open = (Fun) mylib.resolve("getString"); //援引 getString() 函数
if (open)
{
qDebug()<<"OK";
}
if判断进不去。。。
老邓
2011-11-08
打赏
举报
回复
不能调用的根据是什么?
没有理由这样。
QT
调用
DLL
功能
Qt
调用
DLL
功能
函数
是本文要介绍的内容,
DLL
是一个包含可由多个程序同时使用的代码和数据的库
QT
调用
dll
和MFC
调用
QT
的
dll
编写
QT
的
dll
,
QT
调用
QT
的
dll
,
QT
调用
外部的
dll
,MFC程序
调用
QT
的
dll
,
Qt
调用
dll
的
功能
函数
本资料的内容分两部分:第一部分是
QT
在windows上
DLL
的导出和
调用
;第二部分是
QT
在linux上
DLL
的导出和
调用
。
Qt
调用
dll
中的
功能
函数
demo
QT
中
调用
dll
中的
函数
,3种方式demo, 1、采用显示链接,
调用
DLL
中全局
函数
2、采用显示链接,
调用
C++类中的类对象、成员
函数
3、采用隐式链接方法,通过QLibrary类对
DLL
中类对象、全局
函数
的
调用
QT
编写
DLL
调用
示例 方法 参数 返回值 事件回调
QT
编写
DLL
给外部程序
调用
示例 方法 参数 返回值 事件回调 : 1:C#或者 NET 第一步:引入命名空间; using System Runtime InteropServices; 第二步:声明
函数
必须与实际
DLL
中
函数
名及参数一致; [
Dll
Import "
qt
...
Qt
16,211
社区成员
26,591
社区内容
发帖
与我相关
我的任务
Qt
Qt 是一个跨平台应用程序框架。通过使用 Qt,您可以一次性开发应用程序和用户界面,然后将其部署到多个桌面和嵌入式操作系统,而无需重复编写源代码。
复制链接
扫一扫
分享
社区描述
Qt 是一个跨平台应用程序框架。通过使用 Qt,您可以一次性开发应用程序和用户界面,然后将其部署到多个桌面和嵌入式操作系统,而无需重复编写源代码。
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章