插件的原理
2022-12-04 11:06
网友投稿
插件是近年来十分常见的一种技术。插件结构有助于编写有良好的扩充和定制功能的应用程序。许多软件甚至操作系统或其外壳程序都使用了这种技术,著名的使用插件机制的软件是Winamp, Winamp早期的成功虽然在于其快速的解码引擎,但在MP3播放器中能够保特长久的霸主地位。也正是由于内置了健全的插件功能后期的Winamp中增加的MIDI、 MOD,、WAVE等音乐格式的播放功能完全是靠插件实现的。以下是赢在威客网小编整理的插件的原理。
本文将论述插件技术的基本原理,并给出三种不同的实现插件系统的方法。最重要的部分则是插件与主程序之间的交互插件,一般是一个遵循了某些特定规则的DLL,而主程序将所有插件接口在内存中的地址传递给插件插件则根据这些地址来调用插件接口完成所需功能获取所需资源等。
插件的木质是在不修改程序主体的情况下对软件功能进行加强。当插件的接口被公开时任何人都可以自己制作插件来解决一些 操作上的不便或增加一些功能。一个插件框架包括两个部分:主程序(host)和插件((plug-in)。主程序即是“包含”插件的程序。插件必须实现若干标准接口,由主程序在与插件通信时调用。
编程实现方面包括两个部分:一部分是主体程序的插件处理机制,用来进行初始化每个插件的过程,并且管理好每个插件接口。另一部分是插件的接口函数定义,将所有的插件接口函数进行封装。以便开发者自由调用。
不管用什么手段实现插件和主程序之间的交互必须有一个协议,对于方法(1)这个协议是一系列的函数。这些函数由插件DLL引出由主程序调用。对于方法〔2)协议则是一个(或多个)基类通常是抽象类,插件需要构造一个类来继承此抽象类并实现其接口方法,再为主程序提供一个创建和销毁此实现类的对象的公共方法这个公共方法理所当然也应成为协议的一部分。对于方法(3)则是一个(或多个)COM接口插件是一个COM组件,它实现了这些接口,并注册到约定的组件类别tcomponent category)下。
一般音频播放器都有这样一些基本功能:装载音频文件(LoadFlle)、播放(Play)、暂停(Pause),停止((Stop)。我们的播放器将提供这四个功能,但主程序本身并不会直接实现这些功能而是调用插件的实现,上文已经说过。每个插件支持一种音频格式,所以每个插件的功能实现都是不同的。在主程序打开某个格式的音频文件时,根据文件扩展名来决定调用哪个插件的功能,主程序可以在启动时加载所有插件,也可以在打开文件时动态加载所需插件,甚至可以在启动时加载一部分常用的插件,而在需要时加载其余插件开发者可以有很高的自由度
主程序是一个基于对话框的标准Windows程序,它启动时会搜索约定目录(可以约定所有插件都存放在主程序所在目录的Plugins子目录下),并使用Wia32函数LoadLrbrary加载所有插件,每加载一个插件DLL,就调用另一个Wun32函数GetProcAddress获取引出函数
GetSupportedformat的地址,并调用此函数返回插件所支持的格式名(即是音频文件的扩展名),然后把(格式名,DLL句柄)二元组保存下来,当用户通过菜单打开文件时,主程序会根据扩展名决定调用哪个插件的LoadFile函数,并指明此插件DLL的句柄为当前使用的插件的DLL句柄(比如保存到变量m_hlnst中),此后当用户
声明:该内容系网友自行发布,所阐述观点不代表本网(威客牛)观点,如若侵权请联系威客牛删除。