X3插件框架发布新版本 1.0.5

X3 C++ PluginFramework 已发布了一个新版本 V1.0.5,相对于1.0.4的改动有:

1. 支持插件延迟加载,实际用到插件的接口时才加载插件DLL

当调用了一个插件的某个接口时才自动加载该插件,首次加载该插件时会将该插件所有CLSID保存到一个XML文件中,下次运行程序时只读入CLSID而不加载插件DLL文件,这样就能加快程序启动速度。

改动了插件管理器的实现代码,接口和其余插件不受影响。

 

2. 对于事件驱动机制的观察者插件,也支持延迟加载

当某个改变事件触发时才去加载相应的观察者插件。

改动了插件管理器和改变通知管理器的实现代码,接口和其余插件不受影响。

 

3. 修正了插件管理器的几个不常用功能的缺陷

1)LoadPlugins支持绝对路径和相对路径;

2)UnloadPlugin支持不带路径或者只部分路径的文件名;

3)InitializePlugins初始化插件失败时自动卸载插件;

4)增加Ix_AppWorkPath接口,可用于自定义程序配置文件和日志文件将保存在哪个目录,例如用于Vista/Win7

 

插件延迟加载使用说明

插件延迟加载需要在程序的Config目录下放一个INI文件,在其中指定哪些插件需要延迟加载。

假如程序为 D:\Bin\Test.exe,则配置文件为D:\Bin\Config\Test.ini,其内容如下:

[Plugins]
MyPlugin.plugin.dll==
Plugin2.plugin.dll==

这里使用两个等号表示该插件要延迟加载,而仅使用一个等号的配置将用于指定插件加载顺序(以后需要时再实现)。

这里写的插件文件名将与实际遍历查到的文件进行尾部比较,所以会存在两个部分同名的插件混淆的可能,例如“MyPlugin.plugin.dll”与“OtherMyPlugin.plugin.dll”都能匹配上,要解决这个问题可以在配置中加上路径分隔符,例如:

[Plugins]
/MyPlugin.plugin.dll==
\Plugin2.plugin.dll==

如果觉得把很多插件都写上太麻烦,可以只写“.plugin.dll==”,这样所有插件都视为延迟加载了。

 

源码下载地址:https://sourceforge.net/projects/x3c/files/ x3c-1.0.5.zip

问题和建议可在 https://sourceforge.net/projects/x3c/forums 上提出,谢谢。

原文地址:https://www.cnblogs.com/rhcad/p/1951506.html