オブジェクト マップに関するマクロ
これらのマクロでは、オブジェクト マップとエントリが定義されます。
名前 | 説明 |
---|---|
DECLARE_OBJECT_DESCRIPTION | オブジェクト マップに入力される、クラス オブジェクトのテキストの説明を指定できます。 |
OBJECT_ENTRY_AUTO | ATL オブジェクトがオブジェクト マップに入力され、レジストリが更新され、オブジェクトのインスタンスが作成されます。 |
OBJECT_ENTRY_NON_CREATEABLE_EX_AUTO | オブジェクトを登録して初期化するように指定する一方で、CoCreateInstance を使用してオブジェクトを外部で作成できないように指定できます。 |
要件
ヘッダー: atlcom.h
DECLARE_OBJECT_DESCRIPTION
クラス オブジェクトのテキストの説明を指定できます。
DECLARE_OBJECT_DESCRIPTION( x )
パラメーター
x
[入力] クラス オブジェクトの説明。
解説
ATL では OBJECT_ENTRY_AUTO を使用してオブジェクト マップにこの説明が入力されます。
DECLARE_OBJECT_DESCRIPTION は、CComCoClass::GetObjectDescription メソッドをオーバーライドするために使用できる GetObjectDescription
関数を実装します。
GetObjectDescription
関数は IComponentRegistrar::GetComponents
によって呼び出されます。 IComponentRegistrar
は、DLL 内の個々のコンポーネントの登録と登録解除を実行できるようにするオートメーション インターフェイスです。 ATL プロジェクト ウィザードを使用してコンポーネント レジストラー オブジェクトを作成すると、ウィザードによって IComponentRegistrar
インターフェイスが自動的に実装されます。 IComponentRegistrar
は、通常、Microsoft トランザクション サーバーによって使用されます。
ATL プロジェクト ウィザードの詳細については、「ATL プロジェクトの作成」を参照してください。
例
class ATL_NO_VTABLE CMyDescribedClass :
public CComObjectRoot,
public CComCoClass<CMyDescribedClass, &CLSID_MyDescribedClass>
{
public:
CMyDescribedClass()
{
}
// Override CComCoClass::GetObjectDescription
DECLARE_OBJECT_DESCRIPTION("My Described Object 1.0")
};
OBJECT_ENTRY_AUTO
ATL オブジェクトがオブジェクト マップに入力され、レジストリが更新され、オブジェクトのインスタンスが作成されます。
OBJECT_ENTRY_AUTO( clsid, class )
パラメーター
clsid
[入力] classという名前の C++ クラスで実装されている COM クラスの CLSID。
クラス
[入力] clsid で表される COM クラスを実装する C++ クラスの名前。
解説
オブジェクトのエントリ マクロは、クラスの登録、初期化、および作成をサポートするためにプロジェクトのグローバル スコープに配置されます。
OBJECT_ENTRY_AUTO では、このオブジェクトの creator クラスおよび class-factory creator クラスの CreateInstance
関数の関数ポインターが、自動生成された ATL オブジェクト マップに入力されます。 CAtlComModule::RegisterServer が呼び出されると、オブジェクト マップの各オブジェクトのシステム レジストリが更新されます。
次の表は、オブジェクト マップに追加された情報が、このマクロの 2 番目のパラメーターとして指定されたクラスからどのように取得されるかを示しています。
情報 | 取得元 |
---|---|
COM 登録 | レジストリに関するマクロ |
クラス ファクトリの作成 | クラス ファクトリに関するマクロ |
インスタンスの作成 | 集約マクロ |
コンポーネント カテゴリの登録 | カテゴリに関するマクロ |
クラスレベルの初期化とクリーンアップ | ObjectMain |
OBJECT_ENTRY_NON_CREATEABLE_EX_AUTO
オブジェクトを登録して初期化するように指定する一方で、CoCreateInstance
を使用してオブジェクトを外部で作成できないように指定できます。
OBJECT_ENTRY_NON_CREATEABLE_EX_AUTO( clsid, class )
パラメーター
clsid
[入力] classという名前の C++ クラスで実装されている COM クラスの CLSID。
クラス
[入力] clsid で表される COM クラスを実装する C++ クラスの名前。
解説
オブジェクトのエントリ マクロは、クラスの登録、初期化、および作成をサポートするためにプロジェクトのグローバル スコープに配置されます。
OBJECT_ENTRY_NON_CREATEABLE_EX_AUTO を使用すると、オブジェクトを登録して初期化するように指定できます (詳細については、「OBJECT_ENTRY_AUTO」を参照してください) が、CoCreateInstance
を使用して作成することはできません。