|
1Qter豆
现在应用程序的模块比较多,了解到插件方式对应用程序的模块化管理比较方便。
看了一些例程,发现应用程序对插件的加载和通信都是通过类似“loadPlugin()”这样的方法实现的,这里的前提是:
1. 应用程序知道有这么个插件(扫描该插件并加载,然后连接信号槽)
2. 插件知道应用程序的相关接口(开发该插件的过程中知道应用程序的相关信号槽)
问题一:感觉这种方式跟普通的模块化编程(非插件化)性质差不多,请问一下插件方式有什么优势呢?
假如应用程序和插件一起发布了,在运行一段时间后发现需要增加一些功能,这时候再去开发对应的插件(新插件)的话,可能会有以下的情况:
1. 应用程序本省并没有新插件所需的信号
2. 把新插件的dll文件放在对应文件夹后,应用程序虽然扫描到了,但是不会做任何处理(如以下代码)
问题二:在这种情况下,是不是除了加载新插件外,应用程序也要一起修改呢?(修改loadPlugin()以实现对新插件的支持)
- pluginsDir.cd("plugins");
- foreach (QString fileName, pluginsDir.entryList(QDir::Files)) {
- QPluginLoader pluginLoader(pluginsDir.absoluteFilePath(fileName));
- QObject *plugin = pluginLoader.instance();
- if (plugin) {
- echoInterface = qobject_cast<EchoInterface *>(plugin);
- if (echoInterface)
- return true;
- }
- }
复制代码 注:EchoInterfac是之前开发好的插件,如果新增插件(如HelloWorld)的话,这段代码是不是要添加对新插件的识别?
|
|