- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
插件机制总结
共分四个部分:
.插件机制概述:插件的运行特点
.插件书写格式:插件源文件和类的书写
.相关类说明:插件链接和插件管理
.相关类概述:插件应用类的开发平台
一、插件机制概述
.特点
插件机制支持多种语言的插件形式,并有较高的运行效率。添加插件有两种方式:
外部插件
在项目输出的文件夹中直接添加插件源文件或编译好的程序集。
()程序初始化和运行中动态的编译执行由 ,,完成的源文件,在框架内编译完成,不需要第
三方的链接库。()也可以从预编译好的文件加载插件。对脚本语言的快速编译,在加载时 编译运行,和内部代码有相同的运行效率。
内部插件
在项目中添加插件文件代码。在项目生成的时候直接编译到程序集当中。
插件机制也有一些缺点:
安全性,即外部脚本文件中的不安全或恶意的代码。但调试人员可以通过源文件查看。
缺少不同版本的插件开发平台。 插件的书写要与主程序集的版本兼容。 插件机制借鉴版
本中的插件机制,与版本中的插件不兼容。
.运行机制
主程序调用搜索 目录及其子目录,将插件文件(包含格式)读入内存,如果需要编译则进行编 译;然后查找已编译的程序集。 每当确定插件类型,添加插件信息类列表, 最后加载运行插 件。在运行过程中可以用插件管理器来管理插件。
查找过程如下:
() () ();
链接实现部分: 构造函数创建实例
(,);
查找程序集内部的的插件类
(());
查找外部插件类,在文件夹中
();
加载插件
();
插件相关类的关系图:
.插件的信息头
在源文件开头以下格式书写插件信息,这些信息可以被类读取。 头信息是可选的,并推荐使用。例如:
:, , ()
? 1111
.编写源文件
一般插件类的包含两个部分,即两个类:插件加载类 ()和应用类(功能实现类)。
第一个是插件加载类:继承 插件基类,相当于应用类的容器。主要从载了两个方法,
()
代码将在插件被加载的时候执行,并完成与主进程的传递参数 ,或添加渲染目标,或启动监
听(配合监听处理程序完成插件初始化 )。
()
卸载插件。是加载的逆向过程。
第二个类是应用类,即具体实现功能的类,作为插件类的成员使用。
一般使用到主启动项目()、插件开发项目()等项目中的类及参数。
对于比较复杂的插件可以包含更多的类型。
以为例
此例中()是从插件基类继承的成员参数,作为传递的参数;并添加实例为渲染目标。 另外,应用类继承于,实现渲染功能,由插件加载类添加到渲染物列表。
()
{
(); ();
}
}
{
5
():(””,,) { ;
}
()
{
现在时间”();
(,,,);
(,,,);
}
}
三、插件机制相关类及说明
插件的运行机制主要有两个部分组成: 插件运行相关,,
插件管理相关, .插件运行关键类
插件基类:抽象类,所有插件(加载)类的基类, 由链接
属性:
()和
指向主应用程序类的句柄:这两个属性一般作 为参数传递给插件子类 (插件加载类),传递的 方式是虚继承的方式,这是主应用程序和插件
class PluginEngine
Plugin
m_Application: MainApplication
m_isLoaded: bool
m_PluginDirectory: string
+ Load() : void
+ PluginLoad(MainApplication, string) : void
+ PluginUnload() : void
+ Unload() : void
?property?
+ Application() : MainApplication
+ IsLoaded() : bool
+ ParentApplication() : MainApplication
+ PluginDirectory() : string
类信息传递的纽带。和在使用上是等价的,但多使用后者以避免一些命名冲突。 方法:
()
加载插件类的入口, 子类必须重写该方法。程序运行中实际上是由插件基类 方法,但具体的实现就由子类来完成。
()来调用(虚)
(,)
加载插件的方法,这个方法不需要重写,可以由插件类直接调用(最终也将调用 这个方法类似一个保护机制,
()方法)
(继承的方法)来加载插件,而且比较方便安全。 .在运行过程中(而不只是初始化时)插件加载和卸载。
.子类可以直接使用
插件信息类:存储插件的信息及插件的实例, 由直接创建实例。
它只表示插件的外部信息,与插件的功能和实 现没有关系。
比如,插件的实例,插件(由读取文件名称得 到),名称、描述、开发者、站点、相关说明 些是由类读取源文件的头信息得到 ),初始化加
(这
class Plugi nEngine
Plugi nlnfo
m_description
文档评论(0)