ランタイム オブジェクト モデル サービスRun-Time Object Model Services

CObjectおよびCRuntimeClassクラスは、ランタイムクラス情報へのアクセス、シリアル化、および動的オブジェクトの作成など、いくつかのオブジェクトサービスをカプセル化します。The classes CObject and CRuntimeClass encapsulate several object services, including access to run-time class information, serialization, and dynamic object creation. から派生したすべてのクラスは CObject 、この機能を継承します。All classes derived from CObject inherit this functionality.

ランタイムクラス情報へのアクセスを使用すると、実行時にオブジェクトのクラスに関する情報を確認できます。Access to run-time class information enables you to determine information about an object's class at run time. 実行時にオブジェクトのクラスを特定する機能は、関数の引数の型チェックを追加する必要がある場合や、オブジェクトのクラスに基づいて特殊な目的のコードを記述する必要がある場合に便利です。The ability to determine the class of an object at run time is useful when you need extra type-checking of function arguments and when you must write special-purpose code based on the class of an object. ランタイムクラス情報は、C++ 言語で直接サポートされていません。Run-time class information is not supported directly by the C++ language.

シリアル化とは、ファイルに対してオブジェクトの内容を書き込んだり読み取りたりする処理のことです。Serialization is the process of writing or reading an object's contents to or from a file. アプリケーションが終了した後でも、シリアル化を使用してオブジェクトの内容を格納できます。You can use serialization to store an object's contents even after the application exits. その後、アプリケーションの再起動時に、オブジェクトをファイルから読み取ることができます。The object can then be read from the file when the application is restarted. このようなデータオブジェクトは "永続的" と呼ばれます。Such data objects are said to be "persistent."

動的オブジェクトの作成では、実行時に指定したクラスのオブジェクトを作成できます。Dynamic object creation enables you to create an object of a specified class at run time. たとえば、ドキュメント、ビュー、フレームオブジェクトは動的作成をサポートする必要があります。これは、フレームワークで動的に作成する必要があるためです。For example, document, view, and frame objects must support dynamic creation because the framework needs to create them dynamically.

次の表に、実行時クラス情報、シリアル化、および動的作成をサポートする MFC マクロを示します。The following table lists the MFC macros that support run-time class information, serialization, and dynamic creation.

これらのランタイムオブジェクトサービスおよびシリアル化の詳細については、「 CObject クラス: Run-Time クラス情報へのアクセス」を参照してください。For more information on these run-time object services and serialization, see the article CObject Class: Accessing Run-Time Class Information.

Run-Time オブジェクトモデルサービスマクロRun-Time Object Model Services Macros

名前Name 説明Description
DECLARE_DYNAMICDECLARE_DYNAMIC ランタイムクラス情報へのアクセスを有効にします (クラス宣言で使用する必要があります)。Enables access to run-time class information (must be used in the class declaration).
DECLARE_DYNCREATEDECLARE_DYNCREATE ランタイムクラス情報への動的な作成およびアクセスを可能にします (クラス宣言で使用する必要があります)。Enables dynamic creation and access to run-time class information (must be used in the class declaration).
DECLARE_SERIALDECLARE_SERIAL ランタイムクラス情報へのシリアル化とアクセスを可能にします (クラス宣言で使用する必要があります)。Enables serialization and access to run-time class information (must be used in the class declaration).
IMPLEMENT_DYNAMICIMPLEMENT_DYNAMIC ランタイムクラス情報へのアクセスを有効にします (クラスの実装で使用する必要があります)。Enables access to run-time class information (must be used in the class implementation).
IMPLEMENT_DYNCREATEIMPLEMENT_DYNCREATE 動的な作成とランタイム情報へのアクセスを有効にします (クラスの実装で使用する必要があります)。Enables dynamic creation and access to run-time information (must be used in the class implementation).
IMPLEMENT_SERIALIMPLEMENT_SERIAL シリアル化およびランタイムクラス情報へのアクセスを許可します (クラスの実装で使用する必要があります)。Permits serialization and access to run-time class information (must be used in the class implementation).
RUNTIME_CLASSRUNTIME_CLASS CRuntimeClass名前付きクラスに対応する構造体を返します。Returns the CRuntimeClass structure that corresponds to the named class.

OLE では、実行時にオブジェクトを動的に作成する必要が頻繁に発生します。OLE frequently requires the dynamic creation of objects at run time. たとえば、OLE サーバーアプリケーションは、クライアントからの要求に応答して OLE アイテムを動的に作成できる必要があります。For example, an OLE server application must be able to create OLE items dynamically in response to a request from a client. 同様に、オートメーションサーバーは、オートメーションクライアントからの要求に応答して項目を作成できる必要があります。Similarly, an automation server must be able to create items in response to requests from automation clients.

Microsoft Foundation Class ライブラリには、OLE に固有の2つのマクロが用意されています。The Microsoft Foundation Class Library provides two macros specific to OLE.

OLE オブジェクトの動的作成Dynamic Creation of OLE Objects

名前Name 説明Description
AFX_COMCTL32_IF_EXISTSAFX_COMCTL32_IF_EXISTS コモンコントロールライブラリが、指定された API を実装しているかどうかを判断します。Determines whether the Common Controls library implements the specified API.
AFX_COMCTL32_IF_EXISTS2AFX_COMCTL32_IF_EXISTS2 コモンコントロールライブラリが、指定された API を実装しているかどうかを判断します。Determines whether the Common Controls library implements the specified API.
DECLARE_OLECREATEDECLARE_OLECREATE OLE オートメーションを使用してオブジェクトを作成できるようにします。Enables objects to be created through OLE automation.
DECLARE_OLECTLTYPEDECLARE_OLECTLTYPE GetUserTypeNameID GetMiscStatus コントロールクラスのおよびメンバー関数を宣言します。Declares the GetUserTypeNameID and GetMiscStatus member functions of your control class.
DECLARE_PROPPAGEIDSDECLARE_PROPPAGEIDS OLE コントロールにプロパティを表示するプロパティページの一覧が用意されていることを宣言します。Declares that the OLE control provides a list of property pages to display its properties.
IMPLEMENT_OLECREATEIMPLEMENT_OLECREATE OLE システムによってオブジェクトが作成されるようにします。Enables objects to be created by the OLE system.
IMPLEMENT_OLECTLTYPEIMPLEMENT_OLECTLTYPE GetUserTypeNameID GetMiscStatus コントロールクラスのおよびメンバー関数を実装します。Implements the GetUserTypeNameID and GetMiscStatus member functions of your control class.
IMPLEMENT_OLECREATE_FLAGSIMPLEMENT_OLECREATE_FLAGS このマクロまたは IMPLEMENT_OLECREATE は、を使用するクラスの実装ファイルに記述されている必要があり DECLARE_OLECREATE ます。Either this macro or IMPLEMENT_OLECREATE must appear in the implementation file for any class that uses DECLARE_OLECREATE.

AFX_COMCTL32_IF_EXISTSAFX_COMCTL32_IF_EXISTS

コモンコントロールライブラリが、指定された API を実装しているかどうかを判断します。Determines whether the Common Controls library implements the specified API.

構文Syntax

AFX_COMCTL32_IF_EXISTS(  proc );

パラメーターParameters

procproc
関数名を格納している null で終わる文字列へのポインター、または関数の序数値を指定します。Pointer to a null-terminated string containing the function name, or specifies the function's ordinal value. このパラメーターが序数値の場合は、下位ワードである必要があります。上位ワードはゼロである必要があります。If this parameter is an ordinal value, it must be in the low-order word; the high-order word must be zero. このパラメーターは Unicode で指定する必要があります。This parameter must be in Unicode.

解説Remarks

このマクロを使用して、コモンコントロールライブラリが、 GetProcAddressを呼び出すのではなく、 proc によって指定された関数を使用するかどうかを判断します。Use this macro to determine whether the Common Controls library the function specified by proc (instead of calling GetProcAddress.

要件Requirements

afxcomctl32.h, afxcomctl32.h. inlafxcomctl32.h, afxcomctl32.inl

AFX_COMCTL32_IF_EXISTS2AFX_COMCTL32_IF_EXISTS2

コモンコントロールライブラリが、指定された API を実装するかどうかを決定します (これは AFX_COMCTL32_IF_EXISTSの Unicode バージョンです)。Determines whether the Common Controls library implements the specified API (this is the Unicode version of AFX_COMCTL32_IF_EXISTS).

構文Syntax

AFX_COMCTL32_IF_EXISTS2( proc );

パラメーターParameters

procproc
関数名を格納している null で終わる文字列へのポインター、または関数の序数値を指定します。Pointer to a null-terminated string containing the function name, or specifies the function's ordinal value. このパラメーターが序数値の場合は、下位ワードである必要があります。上位ワードはゼロである必要があります。If this parameter is an ordinal value, it must be in the low-order word; the high-order word must be zero. このパラメーターは Unicode で指定する必要があります。This parameter must be in Unicode.

解説Remarks

このマクロを使用して、コモンコントロールライブラリが、 GetProcAddressを呼び出すのではなく、 proc によって指定された関数を使用するかどうかを判断します。Use this macro to determine whether the Common Controls library the function specified by proc (instead of calling GetProcAddress. このマクロは、AFX_COMCTL32_IF_EXISTS の Unicode バージョンです。This macro is the Unicode version of AFX_COMCTL32_IF_EXISTS.

要件Requirements

afxcomctl32.h, afxcomctl32.h. inlafxcomctl32.h, afxcomctl32.inl

DECLARE_DYNAMICDECLARE_DYNAMIC

からクラスを派生させるときに、オブジェクトのクラスに関するランタイム情報にアクセスできるようにし CObject ます。Adds the ability to access run-time information about an object's class when deriving a class from CObject.

DECLARE_DYNAMIC(class_name)

パラメーターParameters

class_nameclass_name
クラスの実際の名前。The actual name of the class.

解説Remarks

クラスのヘッダー (.h) モジュールに DECLARE_DYNAMIC マクロを追加し、このクラスのオブジェクトにアクセスする必要があるすべての .cpp モジュールにそのモジュールを含めます。Add the DECLARE_DYNAMIC macro to the header (.h) module for the class, then include that module in all .cpp modules that need access to objects of this class.

説明に従って DECLARE_ 動的マクロと IMPLEMENT_DYNAMIC マクロを使用する場合は、RUNTIME_CLASS マクロと関数を使用して、 CObject::IsKindOf 実行時にオブジェクトのクラスを特定できます。If you use the DECLARE_ DYNAMIC and IMPLEMENT_DYNAMIC macros as described, you can then use the RUNTIME_CLASS macro and the CObject::IsKindOf function to determine the class of your objects at run time.

クラスの宣言に DECLARE_DYNAMIC が含まれている場合は、IMPLEMENT_DYNAMIC をクラスの実装に含める必要があります。If DECLARE_DYNAMIC is included in the class declaration, then IMPLEMENT_DYNAMIC must be included in the class implementation.

DECLARE_DYNAMIC マクロの詳細については、「 CObject クラスのトピック」を参照してください。For more information on the DECLARE_DYNAMIC macro, see CObject Class Topics.

Example

IMPLEMENT_DYNAMICの例を参照してください。See the example for IMPLEMENT_DYNAMIC.

要件Requirements

ヘッダー: afxHeader: afx.h

DECLARE_DYNCREATEDECLARE_DYNCREATE

CObject派生クラスのオブジェクトを実行時に動的に作成できるようにします。Enables objects of CObject-derived classes to be created dynamically at run time.

DECLARE_DYNCREATE(class_name)

パラメーターParameters

class_nameclass_name
クラスの実際の名前。The actual name of the class.

解説Remarks

フレームワークは、この機能を使用して新しいオブジェクトを動的に作成します。The framework uses this ability to create new objects dynamically. たとえば、新しいドキュメントを開いたときに作成される新しいビューです。For example, the new view created when you open a new document. ドキュメント、ビュー、およびフレームクラスは、動的に作成する必要があるため、動的作成をサポートする必要があります。Document, view, and frame classes should support dynamic creation because the framework needs to create them dynamically.

クラスの .h モジュールに DECLARE_DYNCREATE マクロを追加し、このクラスのオブジェクトにアクセスする必要があるすべての .cpp モジュールにそのモジュールを含めます。Add the DECLARE_DYNCREATE macro in the .h module for the class, then include that module in all .cpp modules that need access to objects of this class.

クラスの宣言に DECLARE_DYNCREATE が含まれている場合は、IMPLEMENT_DYNCREATE をクラスの実装に含める必要があります。If DECLARE_DYNCREATE is included in the class declaration, then IMPLEMENT_DYNCREATE must be included in the class implementation.

DECLARE_DYNCREATE マクロの詳細については、「 CObject クラスのトピック」を参照してください。For more information on the DECLARE_DYNCREATE macro, see CObject Class Topics.

注意

DECLARE_DYNCREATE マクロには、DECLARE_DYNAMIC のすべての機能が含まれています。The DECLARE_DYNCREATE macro includes all the functionality of DECLARE_DYNAMIC.

Example

IMPLEMENT_DYNCREATEの例を参照してください。See the example for IMPLEMENT_DYNCREATE.

要件Requirements

ヘッダー: afxHeader: afx.h

DECLARE_OLECTLTYPEDECLARE_OLECTLTYPE

GetUserTypeNameID GetMiscStatus コントロールクラスのおよびメンバー関数を宣言します。Declares the GetUserTypeNameID and GetMiscStatus member functions of your control class.

構文Syntax

DECLARE_OLECTLTYPE( class_name )

パラメーターParameters

class_nameclass_name
コントロールクラスの名前。The name of the control class.

解説Remarks

GetUserTypeNameIDGetMiscStatus は純粋仮想関数であり、で宣言されて COleControl います。GetUserTypeNameID and GetMiscStatus are pure virtual functions, declared in COleControl. これらの関数は純粋仮想であるため、コントロールクラスでオーバーライドする必要があります。Because these functions are pure virtual, they must be overridden in your control class. DECLARE_OLECTLTYPE に加えて、コントロールクラスの宣言に IMPLEMENT_OLECTLTYPE マクロを追加する必要があります。In addition to DECLARE_OLECTLTYPE, you must add the IMPLEMENT_OLECTLTYPE macro to your control class declaration.

要件Requirements

ヘッダー: afxctl.hHeader: afxctl.h

DECLARE_PROPPAGEIDSDECLARE_PROPPAGEIDS

OLE コントロールにプロパティを表示するプロパティページの一覧が用意されていることを宣言します。Declares that the OLE control provides a list of property pages to display its properties.

構文Syntax

DECLARE_PROPPAGEIDS( class_name )

パラメーターParameters

class_nameclass_name
プロパティページを所有するコントロールクラスの名前。The name of the control class that owns the property pages.

解説Remarks

DECLARE_PROPPAGEIDSクラス宣言の末尾にあるマクロを使用します。Use the DECLARE_PROPPAGEIDS macro at the end of your class declaration. 次に、クラスのメンバー関数を定義する .cpp ファイルで、 BEGIN_PROPPAGEIDS マクロ、コントロールの各プロパティページのマクロエントリ、およびマクロを使用して、 END_PROPPAGEIDS プロパティページリストの末尾を宣言します。Then, in the .cpp file that defines the member functions for the class, use the BEGIN_PROPPAGEIDS macro, macro entries for each of your control's property pages, and the END_PROPPAGEIDS macro to declare the end of the property page list.

プロパティページの詳細については、「 ActiveX コントロール: プロパティページ」を参照してください。For more information on property pages, see the article ActiveX Controls: Property Pages.

要件Requirements

ヘッダー: afxctl.hHeader: afxctl.h

DECLARE_SERIALDECLARE_SERIAL

シリアル化できるの派生クラスに必要な C++ ヘッダーコードを生成し CObject ます。Generates the C++ header code necessary for a CObject-derived class that can be serialized.

DECLARE_SERIAL(class_name)

パラメーターParameters

class_nameclass_name
クラスの実際の名前。The actual name of the class.

解説Remarks

シリアル化とは、オブジェクトの内容をファイルとの間で書き込みまたは読み取りを行うプロセスです。Serialization is the process of writing or reading the contents of an object to and from a file.

.H モジュールで DECLARE_SERIAL マクロを使用し、このクラスのオブジェクトにアクセスする必要があるすべての .cpp モジュールにそのモジュールを含めます。Use the DECLARE_SERIAL macro in an .h module, and then include that module in all .cpp modules that need access to objects of this class.

クラスの宣言に DECLARE_SERIAL が含まれている場合は、IMPLEMENT_SERIAL をクラスの実装に含める必要があります。If DECLARE_SERIAL is included in the class declaration, then IMPLEMENT_SERIAL must be included in the class implementation.

DECLARE_SERIAL マクロには、DECLARE_DYNAMIC と DECLARE_DYNCREATE のすべての機能が含まれています。The DECLARE_SERIAL macro includes all the functionality of DECLARE_DYNAMIC and DECLARE_DYNCREATE.

AFX_API マクロを使用する CArchive と、DECLARE_SERIAL と IMPLEMENT_SERIAL マクロを使用するクラスの抽出演算子を自動的にエクスポートできます。You can use the AFX_API macro to automatically export the CArchive extraction operator for classes that use the DECLARE_SERIAL and IMPLEMENT_SERIAL macros. 次のコードを使用して、(.h ファイルにある) クラス宣言をかっこで囲みます。Bracket the class declarations (located in the .h file) with the following code:

#undef AFX_API
#define AFX_API AFX_EXT_CLASS

// <your class declarations here>

#undef AFX_API
#define AFX_API

DECLARE_SERIAL マクロの詳細については、「 CObject クラスのトピック」を参照してください。For more information on the DECLARE_SERIAL macro, see CObject Class Topics.

Example

class CAge : public CObject
{
public:
   void Serialize(CArchive& ar);
   DECLARE_SERIAL(CAge)

   // remainder of class declaration omitted

要件Requirements

ヘッダー: afxHeader: afx.h

IMPLEMENT_DYNAMICIMPLEMENT_DYNAMIC

CObject階層内のクラス名と位置への実行時アクセスを使用して、動的に派生したクラスに必要な C++ コードを生成します。Generates the C++ code necessary for a dynamic CObject-derived class with run-time access to the class name and position within the hierarchy.

IMPLEMENT_DYNAMIC(class_name, base_class_name)

パラメーターParameters

class_nameclass_name
クラスの実際の名前。The actual name of the class.

base_class_namebase_class_name
基本クラスの名前。The name of the base class.

解説Remarks

.Cpp モジュールで IMPLEMENT_DYNAMIC マクロを使用し、結果として得られるオブジェクトコードを1回だけリンクします。Use the IMPLEMENT_DYNAMIC macro in a .cpp module, and then link the resulting object code only once.

詳細については、「 CObject クラスのトピック」を参照してください。For more information, see CObject Class Topics.

Example

class CPerson : public CObject
{
   DECLARE_DYNAMIC(CPerson)

   // other declarations
};
IMPLEMENT_DYNAMIC(CPerson, CObject)

要件Requirements

ヘッダー: afxHeader: afx.h

IMPLEMENT_DYNCREATEIMPLEMENT_DYNCREATE

CObjectDECLARE_DYNCREATE マクロと共に使用する場合に、派生クラスのオブジェクトを実行時に動的に作成できるようにします。Enables objects of CObject-derived classes to be created dynamically at run time when used with the DECLARE_DYNCREATE macro.

IMPLEMENT_DYNCREATE(class_name, base_class_name)

パラメーターParameters

class_nameclass_name
クラスの実際の名前。The actual name of the class.

base_class_namebase_class_name
基本クラスの実際の名前。The actual name of the base class.

解説Remarks

フレームワークは、この機能を使用して、新しいオブジェクトを動的に作成します。たとえば、シリアル化中にディスクからオブジェクトを読み取る場合です。The framework uses this ability to create new objects dynamically, for example, when it reads an object from disk during serialization. クラス実装ファイルに IMPLEMENT_DYNCREATE マクロを追加します。Add the IMPLEMENT_DYNCREATE macro in the class implementation file. 詳細については、「 CObject クラスのトピック」を参照してください。For more information, see CObject Class Topics.

DECLARE_DYNCREATE マクロと IMPLEMENT_DYNCREATE マクロを使用する場合は、RUNTIME_CLASS マクロとメンバー関数を使用し CObject::IsKindOf て、実行時にオブジェクトのクラスを特定できます。If you use the DECLARE_DYNCREATE and IMPLEMENT_DYNCREATE macros, you can then use the RUNTIME_CLASS macro and the CObject::IsKindOf member function to determine the class of your objects at run time.

クラスの宣言に DECLARE_DYNCREATE が含まれている場合は、IMPLEMENT_DYNCREATE をクラスの実装に含める必要があります。If DECLARE_DYNCREATE is included in the class declaration, then IMPLEMENT_DYNCREATE must be included in the class implementation.

このマクロ定義は、クラスの既定のコンストラクターを呼び出すことに注意してください。Note that this macro definition will invoke the default constructor for your class. 重要でないコンストラクターがクラスによって明示的に実装されている場合は、既定のコンストラクターも明示的に実装する必要があります。If a non-trivial constructor is explicitly implemented by the class, it must also explicitly implement the default constructor as well. 既定のコンストラクターは、クラスの private protected 実装の外部から呼び出されないように、クラスまたはメンバーのセクションに追加できます。The default constructor can be added to the class's private or protected member sections to prevent it from being called from outside the class implementation.

Example

class CMyDynCreateObj : public CObject
{
   int m_Num;
public:
   DECLARE_DYNCREATE(CMyDynCreateObj)
   CMyDynCreateObj(int Num) { m_Num = Num; }
private:
   CMyDynCreateObj() { m_Num = 0; }  // provide default constructor only for 
                                     // dynamic creation 
};
IMPLEMENT_DYNCREATE(CMyDynCreateObj, CObject)

要件Requirements

ヘッダー: afxHeader: afx.h

IMPLEMENT_OLECREATE_FLAGSIMPLEMENT_OLECREATE_FLAGS

このマクロまたは IMPLEMENT_OLECREATE は、DECLARE_OLECREATE を使用するクラスの実装ファイルに記述されている必要があります。Either this macro or IMPLEMENT_OLECREATE must appear in the implementation file for any class that uses DECLARE_OLECREATE.

構文Syntax

IMPLEMENT_OLECREATE_FLAGS( class_name, external_name, nFlags,
    l, w1, w2, b1, b2, b3, b4, b5, b6, b7, b8)

パラメーターParameters

class_nameclass_name
クラスの実際の名前。The actual name of the class.

external_nameexternal_name
他のアプリケーションに公開されているオブジェクト名 (引用符で囲まれています)。The object name exposed to other applications (enclosed in quotation marks).

nFlagsnFlags
には、次のフラグが1つ以上含まれています。Contains one or more of the following flags:

  • afxRegInsertable OLE オブジェクトの [オブジェクトの挿入] ダイアログボックスにコントロールを表示できるようにします。afxRegInsertable Allows the control to appear in the Insert Object dialog box for OLE objects.
  • afxRegApartmentThreading レジストリのスレッドモデルを ThreadingModel = アパートメントに設定します。afxRegApartmentThreading Sets the threading model in the registry to ThreadingModel=Apartment.
  • afxRegFreeThreading レジストリのスレッドモデルを ThreadingModel = Free に設定します。afxRegFreeThreading Sets the threading model in the registry to ThreadingModel=Free.

2つのフラグを組み合わせ afxRegApartmentThreading て、 afxRegFreeThreading ThreadingModel = Both を設定することができます。You can combine the two flags afxRegApartmentThreading and afxRegFreeThreading to set ThreadingModel=Both. スレッドモデルの登録の詳細については、Windows SDK の「 InprocServer32 」を参照してください。See InprocServer32 in the Windows SDK for more information on threading model registration.

lw1w2b1b2b3b4b5b6b7b8 クラスの CLSID のコンポーネント。l, w1, w2, b1, b2, b3, b4, b5, b6, b7, b8 Components of the class's CLSID.

解説Remarks

注意

IMPLEMENT_OLECREATE_FLAGS を使用する場合は、 nFlags パラメーターを使用して、オブジェクトがサポートするスレッドモデルを指定できます。If you use IMPLEMENT_OLECREATE_FLAGS, you can specify which threading model your object supports by using the nFlags parameter. Treading モデルのみをサポートする場合は、IMPLEMENT_OLECREATE を使用します。If you want to support only the single-treading model, use IMPLEMENT_OLECREATE.

外部名は、他のアプリケーションに公開される識別子です。The external name is the identifier exposed to other applications. クライアントアプリケーションは、外部名を使用して、オートメーションサーバーからこのクラスのオブジェクトを要求します。Client applications use the external name to request an object of this class from an automation server.

OLE クラス ID は、オブジェクトの一意の128ビット識別子です。The OLE class ID is a unique 128-bit identifier for the object. これは、 long 構文の説明で、 lw1w2、および b1 によって表される、1つ、2つの 単語、および 8 *バイト***ので構成 されます。It consists of one long, two WORD s, and eight BYTE s, as represented by l, w1, w2, and b1 through b8 in the syntax description. アプリケーションウィザードとコードウィザードでは、必要に応じて一意の OLE クラス Id が作成されます。The Application Wizard and code wizards create unique OLE class IDs for you as required.

要件Requirements

ヘッダー : afxdisp.hHeader: afxdisp.h

IMPLEMENT_OLECTLTYPEIMPLEMENT_OLECTLTYPE

GetUserTypeNameID GetMiscStatus コントロールクラスのおよびメンバー関数を実装します。Implements the GetUserTypeNameID and GetMiscStatus member functions of your control class.

構文Syntax

DECLARE_OLECTLTYPE( class_name, idsUserTypeName, dwOleMisc )

パラメーターParameters

class_nameclass_name
コントロールクラスの名前。The name of the control class.

idsUserTypeNameidsUserTypeName
コントロールの外部名を格納している文字列のリソース ID。The resource ID of a string containing the external name of the control.

dwOleMiscdwOleMisc
1つ以上のフラグを格納している列挙体。An enumeration containing one or more flags. この列挙体の詳細については、Windows SDK の「 OLEMISC 」を参照してください。For more information on this enumeration, see OLEMISC in the Windows SDK.

解説Remarks

IMPLEMENT_OLECTLTYPE に加えて、コントロールクラスの宣言に DECLARE_OLECTLTYPE マクロを追加する必要があります。In addition to IMPLEMENT_OLECTLTYPE, you must add the DECLARE_OLECTLTYPE macro to your control class declaration.

この GetUserTypeNameID メンバー関数は、コントロールクラスを識別するリソース文字列を返します。The GetUserTypeNameID member function returns the resource string that identifies your control class. GetMiscStatus コントロールの OLEMISC ビットを返します。GetMiscStatus returns the OLEMISC bits for your control. この列挙体は、コントロールのさまざまな特性を記述する設定のコレクションを指定します。This enumeration specifies a collection of settings describing miscellaneous characteristics of your control. OLEMISC 設定の詳細については、Windows SDK の「 OLEMISC 」を参照してください。For a full description of the OLEMISC settings, see OLEMISC in the Windows SDK.

注意

ActiveX コントロールウィザードで使用される既定の設定は、OLEMISC_ACTIVATEWHENVISIBLE、OLEMISC_SETCLIENTSITEFIRST、OLEMISC_INSIDEOUT、OLEMISC_CANTLINKINSIDE、および OLEMISC_RECOMPOSEONRESIZE です。The default settings used by the ActiveX ControlWizard are: OLEMISC_ACTIVATEWHENVISIBLE, OLEMISC_SETCLIENTSITEFIRST, OLEMISC_INSIDEOUT, OLEMISC_CANTLINKINSIDE, and OLEMISC_RECOMPOSEONRESIZE.

要件Requirements

ヘッダー: afxctl.hHeader: afxctl.h

IMPLEMENT_SERIALIMPLEMENT_SERIAL

CObject階層内のクラス名と位置への実行時アクセスを使用して、動的に派生したクラスに必要な C++ コードを生成します。Generates the C++ code necessary for a dynamic CObject-derived class with run-time access to the class name and position within the hierarchy.

IMPLEMENT_SERIAL(class_name, base_class_name, wSchema)

パラメーターParameters

class_nameclass_name
クラスの実際の名前。The actual name of the class.

base_class_namebase_class_name
基本クラスの名前。The name of the base class.

wSchemawSchema
逆シリアル化プログラムで、以前のバージョンのプログラムで作成されたデータを識別および処理できるように、アーカイブにエンコードされる UINT の "バージョン番号"。A UINT "version number" that will be encoded in the archive to enable a deserializing program to identify and handle data created by earlier program versions. クラススキーマ番号を-1 にすることはできません。The class schema number must not be -1.

解説Remarks

.Cpp モジュールで IMPLEMENT_SERIAL マクロを使用します。次に、結果として得られるオブジェクトコードを1回だけリンクします。Use the IMPLEMENT_SERIAL macro in a .cpp module; then link the resulting object code only once.

AFX_API マクロを使用する CArchive と、DECLARE_SERIAL と IMPLEMENT_SERIAL マクロを使用するクラスの抽出演算子を自動的にエクスポートできます。You can use the AFX_API macro to automatically export the CArchive extraction operator for classes that use the DECLARE_SERIAL and IMPLEMENT_SERIAL macros. 次のコードを使用して、(.h ファイルにある) クラス宣言をかっこで囲みます。Bracket the class declarations (located in the .h file) with the following code:

#undef AFX_API
#define AFX_API AFX_EXT_CLASS

// <your class declarations here>

#undef AFX_API
#define AFX_API

詳細については、「 CObject クラスのトピック」を参照してください。For more information, see the CObject Class Topics.

Example

IMPLEMENT_SERIAL(CAge, CObject, VERSIONABLE_SCHEMA | 2)

要件Requirements

ヘッダー: afxHeader: afx.h

RUNTIME_CLASSRUNTIME_CLASS

C++ クラスの名前からランタイムクラス構造体を取得します。Gets the run-time class structure from the name of a C++ class.

RUNTIME_CLASS(class_name)

パラメーターParameters

class_nameclass_name
クラスの実際の名前 (引用符で囲まれていない)。The actual name of the class (not enclosed in quotation marks).

解説Remarks

RUNTIME_CLASS は、 class_name によって指定されたクラスの CRuntimeClass構造体へのポインターを返します。RUNTIME_CLASS returns a pointer to a CRuntimeClass structure for the class specified by class_name. CObjectDECLARE_DYNAMIC、DECLARE_DYNCREATE、または DECLARE_SERIAL で宣言された派生クラスのみが、構造体へのポインターを返し CRuntimeClass ます。Only CObject-derived classes declared with DECLARE_DYNAMIC, DECLARE_DYNCREATE, or DECLARE_SERIAL will return pointers to a CRuntimeClass structure.

詳細については、「 CObject クラスのトピック」を参照してください。For more information, see CObject Class Topics.

Example

CRuntimeClass* prt = RUNTIME_CLASS(CAge);
ASSERT(strcmp(prt->m_lpszClassName, "CAge") == 0);

要件Requirements

ヘッダー: afxHeader: afx.h

DECLARE_OLECREATEDECLARE_OLECREATE

CCmdTarget 、OLE オートメーションを使用して、派生クラスのオブジェクトを作成できるようにします。Enables objects of CCmdTarget-derived classes to be created through OLE automation.

DECLARE_OLECREATE(class_name)

パラメーターParameters

class_nameclass_name
クラスの実際の名前。The actual name of the class.

解説Remarks

このマクロは、他の OLE 対応アプリケーションがこの型のオブジェクトを作成できるようにします。This macro enables other OLE-enabled applications to create objects of this type.

クラスの .h モジュールに DECLARE_OLECREATE マクロを追加し、このクラスのオブジェクトにアクセスする必要があるすべての .cpp モジュールにそのモジュールを含めます。Add the DECLARE_OLECREATE macro in the .h module for the class, and then include that module in all .cpp modules that need access to objects of this class.

クラスの宣言に DECLARE_OLECREATE が含まれている場合は、IMPLEMENT_OLECREATE をクラスの実装に含める必要があります。If DECLARE_OLECREATE is included in the class declaration, then IMPLEMENT_OLECREATE must be included in the class implementation. DECLARE_OLECREATE を使用するクラス宣言では、DECLARE_DYNCREATE または DECLARE_SERIAL も使用する必要があります。A class declaration using DECLARE_OLECREATE must also use DECLARE_DYNCREATE or DECLARE_SERIAL.

要件Requirements

ヘッダー: afxdisp.hHeader: afxdisp.h

IMPLEMENT_OLECREATEIMPLEMENT_OLECREATE

このマクロまたは IMPLEMENT_OLECREATE_FLAGS は、を使用するクラスの実装ファイルに記述されている必要があり DECLARE_OLECREATE ます。Either this macro or IMPLEMENT_OLECREATE_FLAGS must appear in the implementation file for any class that uses DECLARE_OLECREATE.

IMPLEMENT_OLECREATE(class_name, external_name, l, w1, w2, b1, b2, b3, b4, b5, b6, b7, b8)

パラメーターParameters

class_nameclass_name
クラスの実際の名前。The actual name of the class.

external_nameexternal_name
他のアプリケーションに公開されているオブジェクト名 (引用符で囲まれています)。The object name exposed to other applications (enclosed in quotation marks).

lw1w2b1b2b3b4b5b6b7b8 クラスの CLSID のコンポーネント。l, w1, w2, b1, b2, b3, b4, b5, b6, b7, b8 Components of the class's CLSID.

解説Remarks

注意

IMPLEMENT_OLECREATE を使用する場合、既定では、単一のスレッドモデルのみがサポートされます。If you use IMPLEMENT_OLECREATE, by default, you support only the single threading model. IMPLEMENT_OLECREATE_FLAGS を使用する場合は、 nFlags パラメーターを使用して、オブジェクトがサポートするスレッドモデルを指定できます。If you use IMPLEMENT_OLECREATE_FLAGS, you can specify which threading model your object supports by using the nFlags parameter.

外部名は、他のアプリケーションに公開される識別子です。The external name is the identifier exposed to other applications. クライアントアプリケーションは、外部名を使用して、オートメーションサーバーからこのクラスのオブジェクトを要求します。Client applications use the external name to request an object of this class from an automation server.

OLE クラス ID は、オブジェクトの一意の128ビット識別子です。The OLE class ID is a unique 128-bit identifier for the object. これは、 long 構文の説明で、 lw1w2、および b1 によって表される、1つ、2つの 単語、および 8 *バイト***ので構成 されます。It consists of one long, two WORD s, and eight BYTE s, as represented by l, w1, w2, and b1 through b8 in the syntax description. アプリケーションウィザードとコードウィザードでは、必要に応じて一意の OLE クラス Id が作成されます。The Application Wizard and code wizards create unique OLE class IDs for you as required.

要件Requirements

ヘッダー: afxdisp.hHeader: afxdisp.h

関連項目See also

マクロとグローバルMacros and Globals
MFC コモンコントロールライブラリの分離Isolation of the MFC Common Controls Library
CLSID キーCLSID Key