註冊COM組件的意義

註冊COM組件有什麼用?爲什麼要使用COM組件必須要先進行註冊?這個註冊過程中都執行了什麼操作?

有人說,註冊COM組件的目的是要實現全局複用,但更精準的來說,應該說是爲了實現全局複用+精準調用。爲什麼這麼說?我們先來看註冊COM組件時都發生了什麼。

實際上說來也簡單,註冊COM組件時主要是向系統註冊表中存了這些東西:CLSID、組件文件絕對路徑。

其中CLSID是組件的GUID全球唯一碼,如此可以保證在整個系統之中不會出現重複,然後再根據CLSID與組件的絕對路徑相對照。這樣的話,哪怕系統之內有同名的兩個組件,也會因爲CLSID不同而不會出現混淆調用的問題。那麼程序使用該組件的調用過程便是先根據CLSID向註冊表中找到組件所在絕對路徑,然後再根據路徑進行組件的裝載調用。

使用這種方式的缺點就是如果在註冊組件之後,組件的路徑發生了變動,就會出現調用錯誤,一般情況下是這樣:

那麼如何避免這種註冊組件之後組件的文件路徑又發生變動的情況呢?我們可以在將組件進行註冊表註冊之前,先將其註冊入GAC全局緩存之中,然後再對GAC緩存之中的組件文件進行註冊,如此一來在註冊表中與CLSID相對應存儲的路徑便是GAC緩存的路徑,你再對原組件文件進行路徑變動操作便不會再有影響。

另外擴展一下COM組件註冊的相關知識,非託管的COM組件由regsvr32.exe進行註冊,而託管代碼實現的COM組件如C#所寫的則由regasm.exe進行註冊。

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