COM编程入门:深入COM服务器
2006-07-21 11:44:59 来源:WEB开发网创建COM对象——类工厂
回首看一看客户端的COM,它是如何以自己独立于语言的方式创建和销毁COM对象。客户端调用CoCreateInstance()创建新的COM对象。现在我们来看看它在服务器端是如何工作的。
你每次实现组件对象类的时候,都要写一个旁类负责创建第一个组件对象类的实例。这个旁类就叫这个组件对象类的类工厂(class factory),其唯一目的是创建COM对象。之所以要一个类工厂,是因为语言无关的缘故。COM本身并不创建对象,因为它不是独立于语言的也不是独立于实现的。
当某个客户端想要创建一个COM对象时,COM库就从COM服务器请求类工厂。然后类工厂创建COM对象并将它返回客户端。它们的通讯机制由函数DllGetClassObject()来提供。
术语 “类工厂”和“类对象”实际上是一回事。没有那个单词能精确描述类工厂的作用和义,但正是这个工厂创建了COM对象,而不是COM类所为。将“类工厂”理解成“对象工厂”可能会更有助于理解(实际上MFC就是这样理解的——它的类工厂实现就叫做COleObjectFactory)。但“类工厂”是正式术语,所以本文也这样用。
当COM库调用DllGetClassObject()时,它传递客户端请求的CLSID。服务器负责为所请求的CLSID创建者各类工厂并将它返回。类工厂本身就是一个组件对象类,并且实现IClassFactory接口。如果DllGetClassObject()调用成功,它返回一个IClassFactory指针给COM库,然后COM库用IClassFactory接口方法创建客户端所请求的COM对象实例。
一下是IClassFactory接口:
struct IClassFactory : public IUnknown
{
HRESULT CreateInstance( IUnknown* pUnkOuter, REFIID riid, void** ppvObject );
HRESULT LockServer( BOOL fLock );
};
更多精彩
赞助商链接