赞
踩
我理解,基于类多态的插件化对于一般的不跨语言不跨平台的应用程序来说已经够用了,今天要说的基于COM的插件化,我觉得更多的是针对大型的跨平台跨语言,需求变动较频繁,涉及领域较广泛的的应用而设计的。
COM是一种跨应用和语言共享二进制代码的方法,它明确指出二进制模块(DLLS和EXEs)必须被编译成与指定的结构匹配。我理解,COM其实就是定义了一种管理模块二进制代码的标准,不管你是用什么语言编写插件,最终都会转换为二进制,而依据COM标准就可以把插件都统一组织成COM对象,这样,基于COM的插件不受限于不同的语言了,而且更方便对插件进行统一的管理。从本质上来说,COM也是一种不局限操作系统的技术,但是目前貌似只在Windows操作系统出现过COM,有人见过在LINU或UNIX下使用COM的欢迎留言。
对于COM编程,我个人也了解不多,这里主要是学习下COM编程的思想,用于C++插件化的实现。据我了解,目前基于COM思想实现插件化主要有三种思路:
今天主要对第一种方法实现以下,第2,3种,我看网上有很多基于这两种思路自己写的插件框架,本人水平有限,还需继续学习相关内容。下面利用windows系统自带的COM库来实现一把基于COM的插件化,仍然以做衣服的案例来实现,其主要步骤如下.
主程序步骤:
插件实现步骤(即COM组件)
这里,重点讲一下CoCreateInstance函数创建对象的过程。该函数内部首先会调用与COM库的协议接口DllGetClassObject,来获取特定的子类工厂对象,然后根据子类工厂中重写的CreateInstance接口来获取特定的实现子类对象.。
另外,这里涉及几个标识符,首先,这里的给定字符表示“COMCTL.FallCloth”作为progID,用于标识该插件实现哪种样式的衣服,该progID下存储了一个GUID(“{9CA9DBE8-C0B1-42c9-B6C7-856BE5756855}”),这是一个全球唯一标识符,用于标识该组件类,以获取特定的子类对象.该组件类ID下的InprocServer32键下存储了插件dll对应的路径,这样,我们就可以根据给定的progID获取特定的dll&#x
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。