Qt 调用 DLL功能函数

addfourliu 2011-11-08 02:32:50
在网上找了个Qt 调用 DLL功能函数的小例子,自己执行了下,加载.dll可以成功,但是dll里面的功能函数却不能调用,不知道为什么?有人遇到这种问题木有啊?
...全文
134 10 打赏 收藏 转发到动态 举报
写回复
用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
  • 打赏
  • 举报
回复
不能调用的根据是什么?
没有理由这样。

16,211

社区成员

发帖
与我相关
我的任务
社区描述
Qt 是一个跨平台应用程序框架。通过使用 Qt,您可以一次性开发应用程序和用户界面,然后将其部署到多个桌面和嵌入式操作系统,而无需重复编写源代码。
社区管理员
  • Qt
  • 亭台六七座
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧