QT插件和普通动态库的差别?!

葬爱の丫 2014-07-25 12:10:40
我在网上查了半天,没有结果,望熟悉QT的各位帮助。
在建立QT项目时,可以建立QT plugin,也可以建立QT liblibrary.
而插件其实就是一个动态链接库,那么这两种工程有什么区别?
我像VC中那样创建个动态链接库工程,生成dll、lib、.h,和这个插件有何区别?
为什么要使用插件呢,优势呢?我看不出和生成一个普通动态链接库的区别....而QT插件还必须遵循一些QT的硬性规定。

另:QT插件可以被C#调用么?我知道普通的C++DLL可以通过PInvoke由C#调用。QT插件貌似不能够被调用吧?
...全文
2893 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
葬爱の丫 2014-07-31
  • 打赏
  • 举报
回复
在C++版面开了帖子,有了些收获,这里就结贴啦,感谢楼上各位的帮助!
葬爱の丫 2014-07-29
  • 打赏
  • 举报
回复
感谢楼上,因为最近必须要在C#中调用别人写好的C++DLL。楼上对Pinvoke了解深么?C#只能调用C++全局函数/静态函数?我调用C++类成员函数,是失败的。难道Pinvoke不能调用C++非静态类成员函数?
dbzhang800 2014-07-27
  • 打赏
  • 举报
回复
建议你暂时先不要纠结Qt插件这个问题了,你应该还没有用过插件,所以你不知道插件的用途是什么。你可以用你最熟悉的东西,写一个插件程序,反过来再来看Qt中的插件,一切就都明了了。 如果你熟悉C#,你可以先写一个C#的插件程序,熟悉一下插件概念。 如果你熟悉python,你可以写一个python的插件程序,熟悉一下插件概念。 如果你熟悉C/C++,而且了解所用系统的动态库/共享库的显式加载,你可以写一个C/C++的插件程序,熟悉一下插件概念。 如果你熟悉... 这些东西都和Qt没有关系,但是,概念都是一样的。 --- 题外,我不太清楚,你为什么会纠结C#和Qt的混合调用,在你对C#/C++/Qt 这三者都特别熟悉之前,建议你放弃这方面的想法和尝试。从你的描述看,你对C#调用 其他语言编译的dll文件,应该也太熟。一般其他语言是不会直接调用C++的动态库的,即使在C#中,PInvoke 调用也是C的动态库,或者你的C++动态库导出了C接口。
葬爱の丫 2014-07-27
  • 打赏
  • 举报
回复
真心感谢楼上三位的讲解,在下还有两点疑问: ①:三楼所说“你只需要弄个jp2000的插件发给用户就行,其他什么都不需要。”,这里指的弄个插件发给用户,是指的发给用户某些DLL文件进行更新吧?普通动态库不也是如此么?升级时也是更新某些DLL啊...... ②:QT插件可以被C#调用么?这才是我最担心的。由于QT对此封装了,所以使用者也必须遵循QT定的某些规则,例如加载插件时使用QPluginLoader之类的,这QPluginLoader在C#里可用不了啊,我的C#如何加载QT插件啊!因为我是要在C#中用的。 我了解C#的pinvoke,将C++DLL对外接口的参数类型,在C#中声明为C#所对应的参数类型即可实现调用。 但是这QT插件如何...? 望各位再帮忙解惑一把!
dbzhang800 2014-07-25
  • 打赏
  • 举报
回复
有这些疑问,说明你没有用插件的需求而已。 另外,你这儿提到的“插件” 是指 QtCreator 插件吧?
dext 2014-07-25
  • 打赏
  • 举报
回复
我也来补充一句,Qt的插件 在Linux下 是不用export路径 的。更NB啊。
foruok 2014-07-25
  • 打赏
  • 举报
回复 1
Qt插件本身是动态库,除此之外,它定义了一组专用的接口,从动态库中导出,供 Qt 的插件管理体系发现和调用。当你选择 Qt 插件项目模板时, Qt Creator 会自动为你插入专用接口相关的模板代码。 假如你从一个白板做起,实现一个动态库,要想客户方调用,还是需要导出N多的函数。而 Qt 这种,只是它约定了你需要导出什么函数、什么类、怎样查询你导出的接口,它定义了一套规范而已。
dbzhang800 2014-07-25
  • 打赏
  • 举报
回复
引用 2 楼 u012211533 的回复:
这里提到的插件,是一种QT技术,用于创建动态链接库。和IDE无关。你用QTCreator和嵌入了QT的VS均能创建出插件......... 我疑惑的是:普通创建动态链接库的方法就能解决问题,为何QT还要封装成一种名曰“插件”的技术。
呵呵,插件 又不是 Qt 独创的东西,各种编程框架,都会引入插件这个东西。你熟悉C#的话,自然对C#中的插件应该不会陌生。 言归正传,一个 Qt 程序写好,并编译成可执行文件之后,你随时可以添加、删除、替换 一些插件,来扩充或调整程序的功能,这就是插件作用。比如,你写了一个图片处理程序(Qt默认是不支持jp2000或eps等等格式),但是用户突然需要它支持jp2000图片格式,你只需要弄个jp2000的插件发给用户就行,其他什么都不需要。
葬爱の丫 2014-07-25
  • 打赏
  • 举报
回复
这里提到的插件,是一种QT技术,用于创建动态链接库。和IDE无关。你用QTCreator和嵌入了QT的VS均能创建出插件......... 我疑惑的是:普通创建动态链接库的方法就能解决问题,为何QT还要封装成一种名曰“插件”的技术。

21,498

社区成员

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

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