CoGetClassObject
CoCreateInstance實(shí)際上并沒(méi)有直接創(chuàng)建COM組件 ,而是創(chuàng)建了一個(gè)被稱作是類廠的組件。而所需的組件正是由些類廠創(chuàng)建的。類廠組件的唯一功能就創(chuàng)建其他的組件。創(chuàng)建組件的標(biāo)準(zhǔn)接口是IClassFactory,用CoCreateInstnce創(chuàng)建的組件實(shí)際上是通過(guò)IClassFactory創(chuàng)建的。
類廠只是創(chuàng)建其它組件的一個(gè)簡(jiǎn)單組件。
區(qū)別1:CoGetClassObject同CoCreatInstance是非常相似的。只一個(gè)參數(shù)不同,CoCreatInstance將接收一個(gè)Iunknown指針,而CoGetClassObject則將接收一個(gè)COSERVERINFO指針。
區(qū)別2:CoGetClassObject返回的是指向類廠中某個(gè)接口的指針(客戶可以用這個(gè)指針來(lái)創(chuàng)建所需的組件),而CoCreateInstance返回的則是指向組件中某個(gè)接口的指針。
為了創(chuàng)建同某個(gè)CLSID相應(yīng)的類廠,需要一個(gè)與CoCreateInstance等價(jià)的,也可以接收一個(gè)CLSID作為參數(shù)并返回相應(yīng)類廠中某個(gè)接口指針的函數(shù)。這個(gè)函數(shù)就是COM庫(kù)中的CoGetClassObject。
類廠所支持的用于創(chuàng)建組件的標(biāo)準(zhǔn)接口是IClassFactory。大多數(shù)組件均可使用IClassFactory接口來(lái)創(chuàng)建。
CoGetClassObject聲明:
STDAPI CoGetClassObject(REFCLSID rclsid,
DWORD dwClsContext,
COSERVERINFO * pServerInfo,
REFIID riid,
LPVOID * ppv); |
|
來(lái)自: semo_zhang > 《com組件》