我对插件儿实现的理解-献给初学
2005-12-04 15:41
323 查看
首先声明:我自己没有写过支持插件儿的程序.
插件儿通常情况下会以动态连接库的形式出现,不过它的后缀,其实不一定是DLL.如果大家对动态连接库有一些了解的话,就会想到,动态连接库的分静态调用和动态调用.
静态的调用,是我们在做DLL的时候提供一个LIB.在你的主程序中加如这个LIB就可以象使用普通函数一样使用动态连接库中的函数.
动态的调用,是指,我们使用LoadLibrary,载入你的动态连接库.然后用GetProcAddress找到指定函数的指针,当然你得事先定义一个同样的函数指针。然后就可以用这个函数了,用完了之后,就可以用FreeLibrary来释放动态连接库.
我们写插件,正是要用到动态加载这种技术。
通常我们看到的插件都是被放在一个或几个固定的目录.这是为什么呢,很明显,主程序必须能找到这些动态连接库,才可以加载.
而插件之所以叫插件,而且可以动态的增加,就是因为,主程序对插件的支持不是写死的.而是从特定的目录搜索.而且每个特定程序的插件,一般都有一定的规则,比如可以操作主程序的某些功能.实际上就是给了插件一个句柄.
每个插件都有固定的格式,比如都有某个函数.然后主程序只是用动态调用的方法来找这个函数,并执行它.
插件被动态的添加到主程序的某个菜单,其实就是在搜索插件的同时,将一个从插件里读出的字符串做为新添加的菜单项的CAPTION.而同时记录了这个菜单项将调用那个插件.
这个得到插件名字的过程就是,你事先规定在插件中有个函数叫getCaption或是什么的,然后你在载入动态连接库的同时调用这个函数,它返回一个串.在主程序里,你就可以用它了.
我现在说的都是理论,但我认为,基本是可以实现.因为我以后将会用这个方法写一些东西.如果有严重的理论错误,请大家指出来.
希望我说的这些能帮到大家而不是将大家带到沟里.
此篇是写打算学习插件编写的朋友的。你们可以从网上搜索 LoadLibrary,GetProcAddress,FreeLibrary,DLL的开发等关键字,找到自己想要的.代码例子.
插件儿通常情况下会以动态连接库的形式出现,不过它的后缀,其实不一定是DLL.如果大家对动态连接库有一些了解的话,就会想到,动态连接库的分静态调用和动态调用.
静态的调用,是我们在做DLL的时候提供一个LIB.在你的主程序中加如这个LIB就可以象使用普通函数一样使用动态连接库中的函数.
动态的调用,是指,我们使用LoadLibrary,载入你的动态连接库.然后用GetProcAddress找到指定函数的指针,当然你得事先定义一个同样的函数指针。然后就可以用这个函数了,用完了之后,就可以用FreeLibrary来释放动态连接库.
我们写插件,正是要用到动态加载这种技术。
通常我们看到的插件都是被放在一个或几个固定的目录.这是为什么呢,很明显,主程序必须能找到这些动态连接库,才可以加载.
而插件之所以叫插件,而且可以动态的增加,就是因为,主程序对插件的支持不是写死的.而是从特定的目录搜索.而且每个特定程序的插件,一般都有一定的规则,比如可以操作主程序的某些功能.实际上就是给了插件一个句柄.
每个插件都有固定的格式,比如都有某个函数.然后主程序只是用动态调用的方法来找这个函数,并执行它.
插件被动态的添加到主程序的某个菜单,其实就是在搜索插件的同时,将一个从插件里读出的字符串做为新添加的菜单项的CAPTION.而同时记录了这个菜单项将调用那个插件.
这个得到插件名字的过程就是,你事先规定在插件中有个函数叫getCaption或是什么的,然后你在载入动态连接库的同时调用这个函数,它返回一个串.在主程序里,你就可以用它了.
我现在说的都是理论,但我认为,基本是可以实现.因为我以后将会用这个方法写一些东西.如果有严重的理论错误,请大家指出来.
希望我说的这些能帮到大家而不是将大家带到沟里.
此篇是写打算学习插件编写的朋友的。你们可以从网上搜索 LoadLibrary,GetProcAddress,FreeLibrary,DLL的开发等关键字,找到自己想要的.代码例子.
相关文章推荐
- 我所理解的设计模式(C++实现)——桥模式(Bridge Pattern)
- spring+mybatis通用dao层、service层的一些个人理解与实现
- 写出一个你自己的MVC框架-基于对springMVC源码实现和理解(3):数据初始化(二)
- 如何理解和编程实现证据理论的Dempster组合规则?
- 图的理解:存储结构与邻接矩阵的Java实现
- 由浅入深理解索引的实现(2)
- 初学Redis(4)——简单实现Redis缓存中的排序功能
- Struts2框架之application、Request、Response、paramaters、Session实现及理解(案例驱动)
- 理解思想比知道实现细节更重要
- C#ListBox理解2--实现多行选择
- 理解vue实现原理,实现一个简单的Vue框架
- python初学——生成器的理解
- 深入理解Lua的闭包一:概念、应用和实现原理
- iOS开发-Objective-C单例在ARC环境下的实现和理解
- 初学算法-快速排序与线性时间选择(Deterministic Selection)的C++实现
- 初学JS——实现基于计时器的小游戏。
- 彻底理解Promise对象——用es5语法实现一个自己的Promise(上篇)
- 递归实现回文判断(如:abcdedbca就是回文,判断一个面试者对递归理解的简单程序)
- 深刻理解Python中的元类(metaclass)以及元类实现单例模式
- 深入理解PHP原理之实现自己的PHP语法