initialization
RegisterClass( TPlugin );
finalization
UnRegisterClass( TPlugin );
end.
TPlugin实现了IPlugin接口,并且注册了该组件,使它能够被容器访问到.
compile,之后,会在%delphi%\bpl目录生成package1.bpl.
构建容器
procedure TForm3.Button1Click( Sender: TObject );
var
theClass : TPersistentClass;
thePlugin : TPersistent;
IPlug : IPlugin;
FPackege : Cardinal;
begin
FPackege := LoadPackage( ''package1.bpl'' ); //加载包
theClass := GetClass( ''TPlugin'' ); //通过字符串获得类定义
if theClass = nil then
begin
ShowMessage( ''TPlugin not load'' );
exit;
end;
thePlugin := theClass.Create; //创建实例
Supports( thePlugin, StringToGUID( ''{48BF4000-B028-4B57-9955-B1A8305DA394}''
), IPlug ); //转换成IPlugin接口
try
IPlug.Execute; //执行插件的
finally
IPlug := nil;
end;
UnloadPackage( FPackege ); //卸载包
end;
project->options->package
点选build with runtime package
修改成vcl;rtl,确定
可以发布测试了
拷贝你的project1.exe,package1,windowSystem32目录下的vcl70.bpl,rtl70.bpl到一个目录,把他们拷贝到一个目录下,发布到一个没有delphi的机器上试试吧.
下一节让容器和插件交互数据
插件规范-----------插件必须实现一个接口,该接口通过GetObject,SetObject方法让容器和插件能够交互数据.
IPlugin = interface
[''{48BF4000-B028-4B57-9955-B1A8305DA394}'']
function GetRunResult: TObject; //用于向容器返回执行Execute后的结果
//用于容器传如执行参数,通常会显示一个Form让用户输入,如果用户存入了
procedure SetRunParam;
function GetInfo: TPluginInfo; //向容器返回插件的信息
{
用于容器调用配置插件的持久性配置,
&n