Службы модели объекта во время выполненияRun-Time Object Model Services

Классы CObject и крунтимекласс инкапсулируют несколько служб объектов, включая доступ к сведениям о классе времени выполнения, сериализации и динамическому созданию объектов.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. Например, объекты Document, View и Frame должны поддерживать динамическое создание, так как платформа должна создавать их динамически.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.The Microsoft Foundation Class Library provides two macros specific to OLE.

Динамическое создание объектов OLEDynamic 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
Указатель на строку, завершающуюся нулем, содержащую имя функции, или задает порядковое значение функции.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. Этот параметр должен быть в Юникоде.This parameter must be in Unicode.

КомментарииRemarks

Используйте этот макрос, чтобы определить, является ли библиотека Common Controls функцией, заданной процедурой (вместо вызова GetProcAddress.Use this macro to determine whether the Common Controls library the function specified by proc (instead of calling GetProcAddress.

ТребованияRequirements

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

AFX_COMCTL32_IF_EXISTS2AFX_COMCTL32_IF_EXISTS2

Определяет, реализует ли библиотека Common Controls указанный API (это версия Юникода AFX_COMCTL32_IF_EXISTS).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
Указатель на строку, завершающуюся нулем, содержащую имя функции, или задает порядковое значение функции.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. Этот параметр должен быть в Юникоде.This parameter must be in Unicode.

КомментарииRemarks

Используйте этот макрос, чтобы определить, является ли библиотека Common Controls функцией, заданной процедурой (вместо вызова GetProcAddress.Use this macro to determine whether the Common Controls library the function specified by proc (instead of calling GetProcAddress. Этот макрос является версией AFX_COMCTL32_IF_EXISTS в Юникоде.This macro is the Unicode version of AFX_COMCTL32_IF_EXISTS.

ТребованияRequirements

afxcomctl32. h, afxcomctl32. 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

Добавьте DECLARE_DYNAMIC макрос в модуль header (. h) для класса, а затем включите этот модуль во все 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

Заголовок: AFX. hHeader: 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.

Добавьте макрос DECLARE_DYNCREATE в модуль h для класса, а затем включите этот модуль во все 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

Заголовок: AFX. hHeader: 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

GetUserTypeNameID и GetMiscStatus являются чисто виртуальными функциями, объявленными в 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.

Используйте макрос DECLARE_SERIAL в модуле h, а затем включите этот модуль во все 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

Заголовок: AFX. hHeader: afx.h

IMPLEMENT_DYNAMICIMPLEMENT_DYNAMIC

Создает код C++, необходимый для динамического CObject производного класса с доступом во время выполнения к имени класса и его положению в иерархии.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

Используйте макрос IMPLEMENT_DYNAMIC в модуле. cpp, а затем свяжите полученный объектный код только один раз.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

Заголовок: AFX. hHeader: afx.h

IMPLEMENT_DYNCREATEIMPLEMENT_DYNCREATE

Позволяет CObject динамически создавать объекты производных классов во время выполнения при использовании с макросом DECLARE_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

Заголовок: AFX. hHeader: 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).

нфлагсnFlags
Содержит один или несколько следующих флагов: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.

Можно объединить два флага afxRegApartmentThreading и afxRegFreeThreading задать ThreadingModel = оба.You can combine the two flags afxRegApartmentThreading and afxRegFreeThreading to set ThreadingModel=Both. Дополнительные сведения о регистрации модели потоков см. в разделе InprocServer32 в Windows SDK.See InprocServer32 in the Windows SDK for more information on threading model registration.

компоненты l, W1, W2, B1, B2, B3, B4, B5, B6, B7, B8 класса CLSID.l, w1, w2, b1, b2, b3, b4, b5, b6, b7, b8 Components of the class's CLSID.

КомментарииRemarks

Примечание

При использовании IMPLEMENT_OLECREATE_FLAGS можно указать, какую модель потоков поддерживает объект, с помощью параметра нфлагс .If you use IMPLEMENT_OLECREATE_FLAGS, you can specify which threading model your object supports by using the nFlags parameter. Если требуется поддержка только модели с одним треадинг, используйте 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 — это уникальный 128-разрядный идентификатор объекта.The OLE class ID is a unique 128-bit identifier for the object. Он состоит из одного long , двух слов s и восьми байт, представленных l, W1, W2 и B1 через B8 в описании синтаксиса.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.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.

идсусертипенамеidsUserTypeName
Идентификатор ресурса строки, содержащей внешнее имя элемента управления.The resource ID of a string containing the external name of the control.

дволемискdwOleMisc
Перечисление, содержащее один или несколько флагов.An enumeration containing one or more flags. Дополнительные сведения об этом перечислении см. в разделе олемиск в Windows SDK.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 Возвращает биты ОЛЕМИСК для элемента управления.GetMiscStatus returns the OLEMISC bits for your control. Это перечисление задает коллекцию параметров, описывающих различные характеристики элемента управления.This enumeration specifies a collection of settings describing miscellaneous characteristics of your control. Полное описание параметров ОЛЕМИСК см. в разделе олемиск в Windows SDK.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

Создает код C++, необходимый для динамического CObject производного класса с доступом во время выполнения к имени класса и его положению в иерархии.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.

всчемаwSchema
Значение типа 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

Используйте макрос IMPLEMENT_SERIAL в модуле. cpp; затем свяжите полученный объектный код только один раз.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

Заголовок: AFX. hHeader: 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.RUNTIME_CLASS returns a pointer to a CRuntimeClass structure for the class specified by class_name. Только CObject производные классы, объявленные с DECLARE_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

Заголовок: AFX. hHeader: 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.

Добавьте макрос DECLARE_OLECREATE в модуль h для класса, а затем включите этот модуль во все 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

Заголовок: афксдисп. 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).

компоненты l, W1, W2, B1, B2, B3, B4, B5, B6, B7, B8 класса 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 можно указать, какую модель потоков поддерживает объект, с помощью параметра нфлагс .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 — это уникальный 128-разрядный идентификатор объекта.The OLE class ID is a unique 128-bit identifier for the object. Он состоит из одного long , двух слов s и восьми байт, представленных l, W1, W2 и B1 через B8 в описании синтаксиса.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.The Application Wizard and code wizards create unique OLE class IDs for you as required.

ТребованияRequirements

Заголовок: афксдисп. hHeader: afxdisp.h

См. также разделSee also

Макросы и глобальные объектыMacros and Globals
Изоляция библиотеки общих элементов управления MFCIsolation of the MFC Common Controls Library
Ключ CLSIDCLSID Key