Essential COM

chap3 class:

現在有了一個 interface, 叫 IApe,

物件中會有很多 implementation. (implement IApe interface)

COM 定義了 interface, implementation, classes. 第三個正式名叫 COM classes or coclasses.

COM 規定,client 必須指明它要用那一個 implementation。

COM 不允許:client 只是查查某 interface 是否有任可用的 implementation.

每一個 COM class 都要有一個 class object. Class object 不需要任何 instance 就存在

COM 更定義可以在不同host, 不同 user , or 不同 process 都各放一個 class object.

COM class 的 ID 叫做 CLSID (它是一GUID)

在例子中,吾人為 class object 再新增一個 interface, 叫 IApeClass

它有兩個 function: CreateApe(), GetApe(nApeID)

—–

client 需要一個機制找出 class object. 這叫 object activation.

SCM services 以 moniker 型式為程式所見。全部被實作在 COM library 內 – OLE32.dll.

—–

第一個要看的,就是 CoGetClassObject()

CoGetClassObject() 會呼叫 你的 COM server 中的 DllGetClassObject(). 所以你一定要實作此函式。

—–

COM 定義了一些 helper interface

IOleItemContainer

 – 開放 GetObject() function.

IClassFactory

 – 開放 CreateInstance(), LockServer()

上述兩者正是為了「物件搜尋」與「物件生成」用的。

在中文版p.125,就改為繼承 library 的 IClassFactory 並實作 IClassFactory::CreateInstance()

—-

為了最佳化 library 提供了 CoCreateInstanceEx(), CoCreateInstance()  給你使用。


%d bloggers like this: