注册COM组件的意义

注册COM组件有什么用?为什么要使用COM组件必须要先进行注册?这个注册过程中都执行了什么操作?

有人说,注册COM组件的目的是要实现全局复用,但更精准的来说,应该说是为了实现全局复用+精准调用。为什么这么说?我们先来看注册COM组件时都发生了什么。

实际上说来也简单,注册COM组件时主要是向系统注册表中存了这些东西:CLSID、组件文件绝对路径。

其中CLSID是组件的GUID全球唯一码,如此可以保证在整个系统之中不会出现重复,然后再根据CLSID与组件的绝对路径相对照。这样的话,哪怕系统之内有同名的两个组件,也会因为CLSID不同而不会出现混淆调用的问题。那么程序使用该组件的调用过程便是先根据CLSID向注册表中找到组件所在绝对路径,然后再根据路径进行组件的装载调用。

使用这种方式的缺点就是如果在注册组件之后,组件的路径发生了变动,就会出现调用错误,一般情况下是这样:

那么如何避免这种注册组件之后组件的文件路径又发生变动的情况呢?我们可以在将组件进行注册表注册之前,先将其注册入GAC全局缓存之中,然后再对GAC缓存之中的组件文件进行注册,如此一来在注册表中与CLSID相对应存储的路径便是GAC缓存的路径,你再对原组件文件进行路径变动操作便不会再有影响。

另外扩展一下COM组件注册的相关知识,非托管的COM组件由regsvr32.exe进行注册,而托管代码实现的COM组件如C#所写的则由regasm.exe进行注册。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章