就是创建对象的对象,每个COM对象都有一个对应的类厂,又叫类对象(Class Object),使用类厂都实现IClassFactory接口,而IClassFactory接口有一个CreateInstance函数,原型如下: HRESULT CreateInstance( IUnknown * pUnkOuter, //Pointer to whether object is or isn't part of // an aggregate REFIID riid, //Reference to the identifier of the interface void ** ppvObject //Address of output variable that receives the // interface pointer requested in riid ); 其中pUnkOuter是外部对象的指针,用于聚合。Riid是要创建的对象的接口的ID,而ppvObject是创建好后返回的接口的指针,而类厂本身是通过Dll的GetClassObject得到的。只有通过类厂才能创建COM对象,而如果你是用CoCreateInstance实际上COM运行环境也是在暗中帮你调用了GetClassOject和IClassFactory的CreateInstance方法
HRESULT CreateInstance(
IUnknown * pUnkOuter,
//Pointer to whether object is or isn't part of
// an aggregate
REFIID riid, //Reference to the identifier of the interface
void ** ppvObject //Address of output variable that receives the
// interface pointer requested in riid
);
其中pUnkOuter是外部对象的指针,用于聚合。Riid是要创建的对象的接口的ID,而ppvObject是创建好后返回的接口的指针,而类厂本身是通过Dll的GetClassObject得到的。只有通过类厂才能创建COM对象,而如果你是用CoCreateInstance实际上COM运行环境也是在暗中帮你调用了GetClassOject和IClassFactory的CreateInstance方法
//---------------------------------那为什么还要用GetClassObject方法???还不如直接用coCreateInstance来得快。
我想肯定是有用的,不过目前不知道啊,
觉得还不如直接创建com对象,中间拿一个类厂放在那儿什么用也不起!
其实当我们一个DLL中只有一个object时,我们不需要类厂,用DllGetClassObject()
真接给客户程序不就行了。
但我们想一下,如果一个DLL中有很多的object时,该怎么办呢。学过COM原理的朋友
肯定会想到用case语句来判断。其实类厂就是这个功能,不过它还有很多具体的功能,比
如:创建对象等.
而使用CoCreateInstance会每次生成一个类厂再销毁 //这个销毁是它自已的动作还是由于它的生命周期???