《Linux下插件开发应用案例》.doc

  1. 1、本文档共13页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
《Linux下插件开发应用案例》.doc

Linux下插件开发应用案例 方汉?   在Linux 上愈来愈多的应用程序利用Plugin编程技术来实现扩展功能,目前应用比较广泛的有Gimp、Netscape/Mozilla、XMMS和Nessus等,本文将简单介绍这些软件的Plugin的架构和编程。   给软件以生命力的Plugin   众所周知,要让一个软件具有生命力,最重要的一点是要让它提供并支持越来越多的功能,而这一点单凭开发者自身是很难独立做到的,需要让第三方的软件开发者可以通过作者提供的一种途径来为该软件添加功能。   最初,人们是使用关联模式,也就是像Windows下的文件扩展名一样,根据不同的文件关联,使用不同的软件打开相应的文件。这种方式编写扩展最为容易和自由,但是存在一定的缺陷,首先是不能利用宿主软件的资源,其次是软件的界面风格不易统一、灵活性不好。后来出现了Plugin结构,也就是利用动态连接库的方式制作Plugin(在Windows平台下是DLL、在Linux/Unix环境下是share object library),Plugin程序只能依附于宿主程序运行,不能独立运行,使用Plugin的优点是系统开销小、速度快,同宿主程序结合紧密、灵活性好。   在Linux上,最著名的Plugin架构就是Netscape提出的Plugin架构,比较出名的还有WinAmp()(在Linux 上改名叫XMMS,网址为),这个MP3 播放软件中多彩多姿的插件(Plugin)系统和皮肤(skin)系统为其一统天下做出了不可磨灭的贡献。现在WinAmp已开始提供一个NSDN(Null Soft Develop Network)来让大家开发Plugin,由此可见Plugin对于一个软件来说是多么重要。   Linux下插件安装   在Linux上,使用某种软件的Plugin的方法很简单,一般该宿主软件都会提供一些缺省的Plugin,而且会搜寻相应的Plugin目录,用户可以把Plugin安装到系统的Plugin目录下也可以安装到自己的目录下。比如,要安装Netscape的Plugin,可以设定$NPX_PLUGIN_PATH这个环境变量到你的新Plugin目录,或者把Plugin安装到下列路径上:   /usr/local/lib/netscape/Plugins?   $MOZILLA_HOME/Plugins?   $HOME/.netscape/Plugins?   Netscape会自动搜寻这些Plugin目录来自动加载相应的Plugin,其他的软件如Gimp、 XMMS和Nessus等的使用方法与此大同小异。   最简单Plugin架构的实现   首先,我们要编写一个宿主程序,该宿主程序必须为Plugin提供相应的接口,例如在本例子中的Action,然后宿主程序可以通过dlopen来打开相应的Plugin,调用dlsym 和createproc来创建Plugin的进程,最后还要调用Plugin执行相应的动作,一切完成后要用dlclose 来关闭Plugin。宿主程序的源代码如下:    Plugin_main.h   #ifndef _PLUG_MAIN_H_   #define _PLUG_MAIN_H_   // 定义强制C类型以回避C++命名规范,这样我们就可以定义dlsym()   #ifdef __cplusplus   extern C {   #endif   class CPlugMain   {    public:    virtual int Action() = 0;   };   // 下面是Plugin的通用函数,每个Plugin都会重载这个函数,主程序将创建惟一的子进程   extern CPlugMain CreatePlug();   typedef CPlugMain  (CREATEPLUG_PROC)();   #ifdef __cplusplus   }   #endif //#define cplusplus   #endif //#define _PLUG_MAIN_H_      Plugin_main.cpp   #include Plugin_main.h   #include <stdio.h>   #include <dlfcn.h> //动态链接库相关函数   //下面将定义固定的Plugin名称,读者可以自行定义如同Windows注册表那样的Plugin注册系统   #define NUM_PLUGINS

文档评论(0)

wgvi + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档