一、控制模块
每个插件库(DLL)都要有且只有一个控制模块,取名就叫ModuleController就行了。
二、不可视插件
用向导生成,最关键的是名字,例如下面代码中字符串部分就是插件名字,生成插件实例时用的:
THYPluginFactory.Create(HInstance, 'HYNonVisualPlugin2',
Create_HYNonVisualPlugin2, THYNonVisualPlugin2);
三、可视插件
生成跟不可视插件一样,但继承的基类不一样,创建实例时可以指定父容器。
四、RemObject SDK插件
插件主程序和插件库都要Build with runtime packages
vcl;rtl;Hydra_Core_D11;Hydra_RO_D11
可以通过IDE上的Hydra菜单Hydra Packages Settings来设置。
1、插件主程序中放Server、Message、ModuleManager、RODLReader
2、Server连接到Message,Message连接到RODLReader,RODLReader连接到ModuleManager
3、生成的RemObject SDK插件中需要修改一下自动生成的Impl代码的initialization部分
在自动生成的TROClassFactory.Create外面包一层THYROFactory.Create,在单元implementation部分引用uses {Hydra:} uHYRes, uHYIntf, uHYROFactory...
RemObject SDK插件的描述要给在THYROFactory.Create方法中。
4、在主程序中加载所有插件模块(主程序所在文件夹)
with ModuleManager do
if ModuleCount>0
then UnloadModules
else LoadModules('*.dll');
5、开启Server.Active := True;
好,现在可以通过RemObject Service Tester查出所有服务了。
五、常用代码
//显示插件中的RemObject SDK服务
procedure DisplayService(lv: TListView);
var i, cnt : integer;
begin
if (csDestroying in ComponentState) then Exit;
lv.Items.Clear;
for i := 0 to (ModuleManager.PluginDescriptorCount-1) do
if (ModuleManager.PluginDescriptors[i].PluginType = ptService) then
begin
with lv.Items.Add do
begin
Caption := ModuleManager.PluginDescriptors[i].Name;
SubItems.Add(ModuleManager.PluginDescriptors[i].Description);
end;
end;
end;
PluginType取决于用的那个工厂方法和继承的基类,THYROFactory.Create生成的即ptService,继承自THYNonVisualPlugin就是ptNonVisual...