谁能详细解释一下,
怎么用,有何用?干吗用呢?
谢谢!

解决方案 »

  1.   

    就是创建对象的对象,每个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方法
      

  2.   

    跟C++里的new差不多,new是用来产生C++类对象的,而类厂是用来生成COM对象的。
      

  3.   

    只有通过类厂才能创建COM对象,而如果你是用CoCreateInstance实际上COM运行环境也是在暗中帮你调用了GetClassOject和IClassFactory的CreateInstance方法
    //---------------------------------那为什么还要用GetClassObject方法???还不如直接用coCreateInstance来得快。
      

  4.   

    To SharpKing515(不穿内裤),如果自己用类厂来创建COM对象,对于相同的COM对象只要创建一次类厂,而使用CoCreateInstance会每次生成一个类厂再销毁,资源占用比较多,呵呵。
      

  5.   

    要雷厂有什么用啊,当时第一com标准,干吗搞出类厂来呢,
    我想肯定是有用的,不过目前不知道啊,
    觉得还不如直接创建com对象,中间拿一个类厂放在那儿什么用也不起!
      

  6.   

    呵,楼上还是没解释明白,至少没说出为什么要类厂
       其实当我们一个DLL中只有一个object时,我们不需要类厂,用DllGetClassObject()
    真接给客户程序不就行了。
       但我们想一下,如果一个DLL中有很多的object时,该怎么办呢。学过COM原理的朋友
    肯定会想到用case语句来判断。其实类厂就是这个功能,不过它还有很多具体的功能,比
    如:创建对象等.
      

  7.   

    请ashchan(www.ashchan.com)大哥再讲解一下:对于相同的COM对象只要创建一次类厂,//这个类厂的生命周期是多久啊??
    而使用CoCreateInstance会每次生成一个类厂再销毁 //这个销毁是它自已的动作还是由于它的生命周期???