tiray

博客园 首页 新随笔 联系 订阅 管理
  6 Posts :: 0 Stories :: 35 Comments :: 0 Trackbacks

(原创不易,引用请注明作者、出处!)
插件是一种遵循统一的预定义接口规范编写出来的程序,应用程序在运行时通过接口规范对插件进行调用,以扩展应用程序的功能。插件在英文中通常称为plug-in、plugin或者plug in。插件最典型的例子是Microsoft的ActiveX控件和COM(Component Object Model,部件对象模型)实际上ActiveX控件不过是一个更高继承层次的COM而已。此外还有Photoshop的滤镜(Filter)也是一种比较常见的插件。

关于ActiveX和COM
在Microsoft的.Net Framework 推出的之前(大约是2003年之前吧),ActiveX和COM可是炙手可热的技术啊!在那个年代,一个顶尖的VC++高手的标志是什么?是会COM编程!不知道IUnknown接口和QueryInterface函数,你怎么可能通过Microsoft的MCSD认证考试?
现在当然不同了,我曾经见过不少断言COM和ActiveX已经消亡或终将消亡的文章。但是不管怎么说,个人认为,ActiveX和COM代表了插件技术的最高境界,通过对ActiveX和COM的研究,我们可以对插件有更深刻的认识。
关于ActiveX控件和COM技术的详细介绍,有兴趣的朋友不妨去“百度一下”,相信能够获得很多相关信息的。

插件技术过时了吗?
COM技术的逐渐淡出,使不少程序员产生了困惑:插件技术已经过时了吗?
NO!至少我不这样认为!毕竟,没有了插件技术,我们还有什么更好的方法为应用程序提供运行时的功能扩展呢?
COM的没落自然有其原因,例如编程实在是太复杂而难以掌握,还有就是在这个病毒和木马肆虐的年代,其安全性也令人堪忧。但至少我们可以看到,插件技术的成功应用还是有的:比如PhotoShop的滤镜,比如各大主流工控软件的功能扩展。
对于插件的理解,我们应该注意以下几点:
一、插件是遵循统一的预定义接口规范编写的。
下面我以微软的ActiveX Control Test Container为大家解释一下插件的接口定义。
1、打开VS.NET 2005;
2、点击主菜单的“工具”菜单;
3、如果在“工具”菜单中未找到“Activex Test Container”,则点击“工具”-〉“外部工具”,在“外部工具”对话框的“菜单内容”列表框中,选中“Activex Test Container",然后点击右上角的"添加“按钮,再点击左下角的”确定按钮“,此步骤将在在“工具”菜单中添加“Activex Test Container”菜单项;
4、点击主菜单的“工具->Activex Test Container”菜单项,运行”Activex Test Container" ;
查看更多精彩图片
5、在“Activex Test Container”程序中点击“编辑->插入新控件”菜单;
6、在“插入控件”对话框中找到“日历控件 11.0" 控件,点击确定;
查看更多精彩图片
7、点击“控件”-〉“调用”方法,弹出“调用方法”对话框,按下图所示的方法将日历控件的背景色设置为红色;
查看更多精彩图片
在这里,“BackColor”是一个预定义的通用的Activex控件接口函数,用于设置控件的背景颜色。
二、应用程序是在运行时调用插件以实现功能扩展的
插件最吸引人的地方当然就是其所实现“运行时(run-time)"功能扩展。这意味着软件开发者可以通过公布插件的预定义接口规范,从而允许第三方的软件开发者通过开发插件对软件的功能进行扩展,而无需对整个程序代码进行重新编译。
运行时(run-time)是相对于编译时(assembly-time)而言的。一般来说,软件开发者对软件功能更新时,是在源代码级别进行更新,然后对整个程序或部分动态链接库(DLL)进行重新编译,进而发布应用程序的新版本,这就是编译时(assembly-time)的软件更新。
三、插件技术的优缺点
运行时的软件功能扩展其优点是显而易见的:
1、对软件的开发者而言,只需对主程序和某些常用插件进行更新和维护,然后通过公布插件接口吸引第三方的软件开发者对主程序的功能进行扩展,这是一种“我为人人,人人为我”的双赢策略;
2、对最终用户而言,可以通过有选择地购买第三方提供的插件实现自己所需要的功能,从而实现最佳性价比组合,以节省不必要的开支。
但是,运行时的软件功能扩展也有其弊端:
1、为实现运行时的软件扩展,程序开发者必须编写更多、更复杂的代码,从而会对程序的执行效率产生一定的影响。关于这一点,我会在第二讲中详细论述;
2、由于插件是在运行时加载的,因此第三方插件可能对用户造成危害。这种危害通常可以分为两类:
(1)由于插件开发者的技术水平原因导致的插件BUG,这种BUG可能导致内存泄露、死机、数据丢失等等故障,从而影响到用户对软件的使用;
(2)插件开发者恶意开发类似于病毒和木马的插件,窃取或毁坏用户数据,使用户遭受不必要的损失;
为了避免此类缺点,软件开发者可能需要付出额外的代价,如需要对第三方插件进行检验和认证,或者干脆不对外提供插件开发接口,仅由自己提供插件。

Tag标签: C#,插件,.NET
posted on 2008-04-15 03:35 tiray 阅读(3259) 评论(21)  编辑 收藏 所属分类: C#编程

Feedback

#1楼  2008-04-15 08:21 李战      
支持,俺觉得插件不会过时,最多会被其他的形式所替代,反正浏览器总要扩展。
  回复  引用  查看    

#2楼  2008-04-15 08:38 张威 [未注册用户]
插件怎么可能过时呢?
现在写程序哪个人没有调用别人的dll呢?



软件破解研究工作室!破软件找我们
官方网站:
http://wwwpj.zhan.cn.yahoo.com
电子邮箱:591103983@qq.com
qq号码: 591103983
电话:13157158238(张威)
软件破解研究qq群:40691973
专业软件开发,修改,oem,加密解密,复制狗,克隆狗,反编译,逆向工程等服务
破解新的软件请联系 ,一般在3个工作日可以完成
  回复  引用    

#3楼  2008-04-15 08:45 留恋星空      
mark
  回复  引用  查看    

#4楼  2008-04-15 08:51 小猴子      

  回复  引用  查看    

#5楼  2008-04-15 09:21 leadnt.org [未注册用户]
疑问:framework是03年后推出的吗?应该是01年吧?
  回复  引用    

#6楼  2008-04-15 09:21 Rexzhou [未注册用户]
期待后续文章。
其实一直对像Eclipse那样的插件架构很感兴趣
  回复  引用    

#7楼  2008-04-15 09:21 狼Robot      
学习
  回复  引用  查看    

#8楼  2008-04-15 09:50 John Rambo      
支持楼主。插件万岁。
  回复  引用  查看    

#9楼  2008-04-15 10:36 Justin      
CLR底层也是通过COM来实现的吧
  回复  引用  查看    

#10楼  2008-04-15 11:57 Leepy      
学习一下
  回复  引用  查看    

#11楼  2008-04-15 12:44 Rexzhou [未注册用户]
@Justin
微软大部分软件都基于COM,比如Office。装好Office之后,注册表会多出很多COM项
  回复  引用    

#12楼  2008-04-15 14:23 Lucky Jack      
学习了,为什么我的VS05下没有"Activex Test Container”"呢?
  回复  引用  查看    

人家说了.NET就是COM 3.0
你如果学习过COM的话,你会发现.NET及C#的许多特性都是从COM来的
  回复  引用    

#14楼 [楼主] 2008-04-15 17:49 tiray      
--引用--------------------------------------------------
未注册用户: 人家说了.NET就是COM 3.0
你如果学习过COM的话,你会发现.NET及C#的许多特性都是从COM来的
--------------------------------------------------------
有道理!学习了!
  回复  引用  查看    

#15楼 [楼主] 2008-04-15 19:47 tiray      
--引用--------------------------------------------------
leadnt.org: 疑问:framework是03年后推出的吗?应该是01年吧?
--------------------------------------------------------
是我不够严谨!以后会注意的!
  回复  引用  查看    

#16楼  2008-04-15 22:09 生鱼片      
学习
  回复  引用  查看    

#17楼  2008-04-16 12:00 ADDINs [未注册用户]
look at this:
http://www.msup.com.cn/viewCourse,2008414-1057.aspx
It is all about the extensibilities of software systems.
  回复  引用    

#18楼  2008-04-17 13:26 BigBar      
--引用--------------------------------------------------
Lucky Jack: 学习了,为什么我的VS05下没有"Activex Test Container”"呢?
--------------------------------------------------------

我的也没有!
  回复  引用  查看    

#19楼 [楼主] 2008-04-17 22:26 tiray      
--引用--------------------------------------------------
BigBar: --引用--------------------------------------------------
Lucky Jack: 学习了,为什么我的VS05下没有"Activex Test Container”"呢?
--------------------------------------------------------

我的也没有!
--------------------------------------------------------
可能是安装vs.net2005的时候没有选择安装吧!
  回复  引用  查看    

#20楼  2008-04-19 17:14 ServerLandon      
"不知道IUnkonw接口和QueryInterface函数,你怎么可能通过Microsoft的MCSD认证考试?"

上面这句话楼主有笔误
  回复  引用  查看    

#21楼 [楼主] 2008-04-19 18:10 tiray      
--引用--------------------------------------------------
ServerLandon: "不知道IUnkonw接口和QueryInterface函数,你怎么可能通过Microsoft的MCSD认证考试?"

上面这句话楼主有笔误
--------------------------------------------------------
多谢指正!
  回复  引用  查看    


标题  
姓名  
主页
Email (只有博主才能看到) 
验证码 *  看不清,换一张 [登录][注册]
内容(请不要发表任何与政治相关的内容)  
  登录  使用高级评论  新用户注册  返回页首  恢复上次提交      
该文被作者在 2008-04-19 18:10 编辑过