CComClassFactory クラス
このクラスは、IClassFactory インターフェイスを実装します。
構文
class CComClassFactory
: public IClassFactory,
public CComObjectRootEx<CComGlobalsThreadModel>
メンバー
パブリック メソッド
名前 | 説明 |
---|---|
CComClassFactory::CreateInstance | 指定した CLSID のオブジェクトを作成します。 |
CComClassFactory::LockServer | メモリ内のクラス ファクトリをロックします。 |
解説
CComClassFactory
は、IClassFactory インターフェイスを実装します。これには、特定の CLSID のオブジェクトを作成するためのメソッドと、新しいオブジェクトをより迅速に作成できるようにするためにクラス ファクトリをメモリにロックするためのメソッドが含まれます。 IClassFactory
は、システム レジストリに登録し、CLSID を割り当てるすべてのクラスに実装する必要があります。
通常、ATL オブジェクトは、クラス ファクトリを CComCoClass から派生させて取得します。 このクラスには、CComClassFactory
を既定のクラス ファクトリとして宣言する DECLARE_CLASSFACTORY マクロが含まれます。 この既定値をオーバーライドするには、クラス定義で、DECLARE_CLASSFACTORY
XXX マクロのいずれかを指定します。 たとえば、DECLARE_CLASSFACTORY_EX マクロは、指定されたクラスをクラス ファクトリとして使用します。
class ATL_NO_VTABLE CMyCustomClass :
public CComObjectRootEx<CComSingleThreadModel>,
public CComCoClass<CMyCustomClass, &CLSID_MyCustomClass>,
public IDispatchImpl<IMyCustomClass, &IID_IMyCustomClass, &LIBID_NVC_ATL_COMLib, /*wMajor =*/ 1, /*wMinor =*/ 0>
{
public:
DECLARE_CLASSFACTORY_EX(CMyClassFactory)
// Remainder of class declaration omitted.
上記のクラス定義では、CMyClassFactory
がオブジェクトの既定のクラス ファクトリとして使用されます。 CMyClassFactory
は、CComClassFactory
から派生して、CreateInstance
をオーバーライドする必要があります。
ATL にはこの他に、クラス ファクトリを宣言するマクロが 3 つあります。
DECLARE_CLASSFACTORY2: ライセンスによる作成を制御する CComClassFactory2 を使用します。
DECLARE_CLASSFACTORY_AUTO_THREAD: 複数のアパートメントにオブジェクトを作成する CComClassFactoryAutoThread を使用します。
DECLARE_CLASSFACTORY_SINGLETON: 1 つのCComObjectGlobal オブジェクトを構築する CComClassFactorySingleton を使用します。
要件
ヘッダー: atlcom.h
CComClassFactory::CreateInstance
指定した CLSID のオブジェクトを作成し、このオブジェクトへのインターフェイス ポインターを取得します。
STDMETHOD(CreateInstance)(LPUNKNOWN pUnkOuter, REFIID riid, void** ppvObj);
パラメーター
pUnkOuter
[in] オブジェクトを集計の一部として作成中の場合、pUnkOuter は外部の不明な値である必要があります。 それ以外の場合、pUnkOuter は NULL である必要があります。
riid
[入力] 要求された インターフェイスの IID。 pUnkOuter が NULL 以外の場合、riid は IID_IUnknown
である必要があります。
ppvObj
[出力] riid によって識別されるインターフェイス ポインターへのポインター。 オブジェクトがこのインターフェイスをサポートしていない場合、ppvObj は NULL に設定されます。
戻り値
標準の HRESULT 値。
CComClassFactory::LockServer
_Module::Lock
と _Module::Unlock
をそれぞれ呼び出すことで、モジュールのロック数をインクリメントおよびデクリメントします。
STDMETHOD(LockServer)(BOOL fLock);
パラメーター
fLock
[in] TRUE の場合、ロック数はインクリメントされます。それ以外の場合、ロック数はデクリメントされます。
戻り値
標準の HRESULT 値。
解説
_Module
は、CComModule またはそれから派生したクラスのグローバル インスタンスを参照します。
LockServer
を呼び出すことで、クライアントによるクラス ファクトリの保持が可能となり、複数のオブジェクトが迅速に作成されます。