WisdomPluginFramework是融合OSGI微内核理念 + Eclipse的扩展点概念而精心设计的轻量级插件框架,

由Delphi实现,但可以使用于Delphi、BCB、VC++中,提供非常强大灵活的插件调度能力,让你充分享受插件式编程的乐趣。

http://www.cnblogs.com/IceAir/p/3855559.html

框架都特性

1、她是微内核的设计
   什么是微内核?就是核心实现小如原子,其它一切皆是插件,通过插件的相互构织构建出大千世界。
与此相对应的,那些构建了基本框架,给你一堆既定接口让你完善细处的叫巨内核设计,我讨厌学习一堆接口,因此坚决支持微内核设计,
微内核下整个实现的核心代码可能就2000行内,对高手来说三刀两斧就阅读完了,代码虽小,却是灵活强大。
   用巨内核的叫水泥工,而在微内核外,那是你自由奔放的灵感创造,你就是世界的构筑者。

2、面向接口,任意角落调用
   插件核心、插件服务全部以纯接口方式暴露,任何插件在任何时候可以获取任何其它插件所声明提供的接口服务,不用关心怎么处理和
这些插件的关系,人人为我,我为人人嘛。

3、扩展点概念让插件无限扩展
   每个插件实现自己梦想的同时,能力大的还可以留给别人实现梦想的空间,这个空间就是扩展点,每个插件都可以向别的插件声明扩展空间,
任何其它插件都可以来实现这个扩展点,就如同一个插头又预留有插头口一样,插头和插头间可以互插而互连形成树状获得无限扩展能力,但
对于任何一个插件角度看去,任何其它插件又是平面化的,就像人与人一样,你可以与任何一个人你见到的人打交道,而不需要一定有介绍人。
   扩展点概念是Eclipse的设计精髓之一,通过扩展点,能让你的界面灵活得就像Eclipse一样。

4、她只使用纯DLL做插件(当然也可用BPL,我认为那只是打个钩的事情)
    Delphi下的BPL确实很好,但你一定咬牙切齿要维护一个支持那时的BPL的编译环境和控件,我也是这样想的,因此坚决支持纯正DLL。

5、她能支持除Delphi外的其它编译器生成的DLL
   像VC++有这么多优秀的库,不用甚是可惜,所以,支持它编译的DLL!如果万一还有支持不住的怎么办?比如像易语言?比如在Linux下跑?
好得我也考虑到了,刚才我有把微内核比作原子,大家都知道,原子还能更细分到电子,所以,微内核里的东西还能细分出来更换呢!
内核里我就有一个DLL加载器,你只要为特殊的DLL重定义一个加载器,就能跑起来了,看到这里,是不是有点跃跃欲试了哈。

6、她不需要重启就能动态更新/更换新版本的DLL插件
   这功能在不能停的服务端那是相当有用对不对,听起来也很高大上对不对,其实实现很简单,你只需遵守一条规则就行,那就是她叫你释放
某个接口时你要立马无条件接受并立刻按她说的做,当然,一瞬间后她会立刻把你需要的服务接口送还给你。

7、插件懒加载,务求最少资源占用
   插件框架提供总是、按需、自动管理三种方式载入插件,不必要还没有用起的插件就留着在磁盘上吧,保持她苗条秀丽的身材跑得快效率高。
在自动这种方式下,如果插件在一段时间发现没人用,就把插件卸出内存,哇,这功能好啊!很遗憾,我没有做,不是懒,因为我细想后,觉得
这件事情可划入由外部插件来插手的领域,不是原子性的范畴,以保证微内核是真的微哈。

8、手动式还是配置全由你
   提供全套API让你可在程序中手动获取、管理、卸载插件DLL,当然也提供xml配置的方式自动管理插件,要不,小小程序也要配一个xml就说不过去了。

9、可能可以在Linux下跑
   我只用到了D7的语言特性,因此,小改一点应可以用Lazarus跑起来,但我是Linux菜鸟,没有发言权,所以只能说可能,求高手上斧。

然后再说下怎么使用,还是很简单地:

1、解压到目录A后,在Delphi环境中,Tools-->Environment Options,打开Library标签,
在Browsing Path和Library Path中包含源码中的Core目录

2、新建项目,在Project-->View Source下的uses中,首先第一个打上”WisdomFramework“,在需要跑起的地方加一句TWisdomFramework.Run就可以了

3、在需要调用框架接口的地方,uses一下接口说明文件即可,其中”WisdomCoreInterfaceForD“是给Delphi用的,给C++用的头文件在Demo的Cplus里哦

这里有一条规则:如果搞有DLL中的界面元素显示到Host主窗口,那么在主窗口的OnClose或Destroy中,一定要调用一下TWisdomFramework.Stop

具体特性参看Demo演示。

最后,说一下这个框架的设计理念,这只需要一张图就足够了,如下:

http://bbs.2ccc.com/topic.asp?topicid=458999

https://code.csdn.net/IceAir/wisdompluginframework

Delphi 的插件框架 WisdomPluginFramework的更多相关文章

  1. 终于可以发布Delphi下收点OSGI精髓皮毛而设计的插件框架WisdomPluginFramework

    这是一个Delphi实现的插件框架,我耗费了相当相当相当多的精力来设计她,虽然仅闪着点我微薄智慧的光芒,但我还是决定用Wisdom来命名她,也因它是我绝无仅有的,在完成1年多后回头来看仍能相当满意的作 ...

  2. delphi 的插件机制与自动更新

    delphi 的插件机制与自动更新 : 1.https://download.csdn.net/download/cxp_2008/2226978   参考 2.https://download.cs ...

  3. 分享在Linux下使用OSGi.NET插件框架快速实现一个分布式服务集群的方法

    在这篇文章我分享了如何使用分层与模块化的方法来设计一个分布式服务集群.这个分布式服务集群是基于DynamicProxy.WCF和OSGi.NET插件框架实现的.我将从设计思路.目标和实现三方面来描述. ...

  4. (2)从实际项目谈起,基于MEF的插件框架之总体设计

    文章版权由作者李晓晖和博客园共有,若转载请于明显处标明出处:http://www.cnblogs.com/naaoveGIS/. 1.MEF框架简介 MEF的全称是Managed Extensibil ...

  5. [转]仿World Wind构造自己的C#版插件框架——WW插件机制精简改造

    很久没自己写东西啦,早该好好总结一下啦!一个大师说过“一个问题不应该被解决两次!”,除了一个好脑筋,再就是要坚持总结. 最近需要搞个系统的插件式框架,我参照World Wind的插件方式构建了个插件框 ...

  6. 基于Proxy思想的Android插件框架

    意义 研究插件框架的意义在于下面几点: 减小安装包的体积,通过网络选择性地进行插件下发 模块化升级.减小网络流量 静默升级,用户无感知情况下进行升级 解决低版本号机型方法数超限导致无法安装的问题 代码 ...

  7. [转]C/C++:构建你自己的插件框架

    本文译自Gigi Sayfan在DDJ上的专栏文章.Gigi Sayfan是北加州的一个程序员,email:gigi@gmail.com. 本文是一系列讨论架构.开发和部署C/C++跨平台插件框架的文 ...

  8. 基于MEF的插件框架之总体设计

    基于MEF的插件框架之总体设计 1.MEF框架简介 MEF的全称是Managed Extensibility Framework(MEF),其是.net4.0的组成部分,在3.5上也可以使用.熟悉ja ...

  9. delphi 的 ORM 框架

    delphi 的 ORM 框架,收集如下: 1.EntityDac    https://www.devart.com/entitydac/download.html 2.mORMot    The  ...

随机推荐

  1. Ubuntu16.04安装记

    Ubuntu16.04安装记 基本信息: 华硕笔记本 Windows 10 家庭版 处理器:Intel(R) Core(TM) i5-7200U CPU @ 2.50GHz 2.71GHz 已安装的内 ...

  2. Loadrunner下WebTours系统自带的用户名和密码

    打开:http://127.0.0.1:1080/WebTours/ 系统默认自带两个用户名和密码,位于~\WebTours\MercuryWebTours\users: 1.用户名:joe,密码:y ...

  3. css控制单行文本溢出

    1.溢出属性(容器的) overflow:visible/hidden(隐藏)/scroll/auto(自动)/inherit; visible:默认值,内容不会被修剪,会成现在元素框之外: hidd ...

  4. EF – 8.多对多关联

    5.6.10 <多对多关联(上)> 时长:9分57秒 难度:难 5.6.11<多对多关联(下)> 时长:8分50秒 难度:难 如果单独地把多对多关联的CRUD拿出来讲,确实比较 ...

  5. iOS开发:用DES对字符串加解密

    参考http://www.cnblogs.com/janken/archive/2012/04/05/2432930.html,做了个小修改,实现PHP,JAVA,Objective-c加解密结果相同 ...

  6. day4 使用yield实现单线程

    一.yield生成器(yield) yield用来结束while循环,并且能够保持之前循环的状态,下一次调用的时候直接从yield开始执行,执行yield后面的程序,并且重新进行循环:另外,yield ...

  7. python collections模块详解

    参考老顽童博客,他写的很详细,例子也很容易操作和理解. 1.模块简介 collections包含了一些特殊的容器,针对Python内置的容器,例如list.dict.set和tuple,提供了另一种选 ...

  8. 【笔试题】怎样将 GB2312 编码的字符串转换为 ISO-8859-1 编码的字符串?

    笔试题 怎样将 GB2312 编码的字符串转换为 ISO-8859-1 编码的字符串? import java.io.UnsupportedEncodingException; public clas ...

  9. 长沙理工大学第十二届ACM大赛-重现赛 K - 大家一起来数二叉树吧

    题目描述 某一天,Zzq正在上数据结构课.老师在讲台上面讲着二叉树,zzq在下面发着呆. 突然zzq想到一个问题:对于一个n个节点,m个叶子的二叉树,有多少种形态呐?你能告诉他吗? 对于第一组样例的解 ...

  10. Unity Shader 之 透明效果

    透明效果 透明效果一般有两种实现方法: 第一种,使用透明度测试(Alpha Test) 第二种,使用透明度混合(Alpha Blending) 透明度测试和透明度混合机制: 透明度测试(Alpha T ...