Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Замечание
Библиотека активных шаблонов (ATL) продолжает поддерживаться. Однако мы больше не добавляем функции или обновляем документацию.
Этот класс предоставляет методы для создания экземпляров класса и получения его свойств.
Синтаксис
template <class T, const CLSID* pclsid = &CLSID_NULL>
class CComCoClass
Параметры
T
Класс, производный от CComCoClass.
pclsid
Указатель на CLSID объекта.
Участники
Открытые методы
| Имя | Описание |
|---|---|
| CComCoClass::CreateInstance | (статический) Создает экземпляр класса и запросов для интерфейса. |
| CComCoClass::Error | (статический) Возвращает подробные сведения об ошибке клиенту. |
| CComCoClass::GetObjectCLSID | (статический) Возвращает идентификатор класса объекта. |
| CComCoClass::GetObjectDescription | (статический) Переопределите, чтобы вернуть описание объекта. |
Замечания
CComCoClass предоставляет методы для получения CLSID объекта, задания сведений об ошибке и создания экземпляров класса. Любой класс, зарегистрированный на карте объектов, должен быть производным от CComCoClass.
CComCoClass также определяет фабрику классов по умолчанию и модель агрегирования для объекта.
CComCoClass использует следующие два макроса:
DECLARE_CLASSFACTORY Объявляет фабрику классов для CComClassFactory.
DECLARE_AGGREGATABLE объявляет, что объект можно агрегировать.
Вы можете переопределить любой из этих значений по умолчанию, указав другой макрос в определении класса. Например, чтобы использовать CComClassFactory2 вместо CComClassFactoryэтого, укажите макрос DECLARE_CLASSFACTORY2 :
class ATL_NO_VTABLE CMyClass2 :
public CComObjectRootEx<CComSingleThreadModel>,
public CComCoClass<CMyClass2, &CLSID_MyClass>,
public IDispatchImpl<IMyClass, &IID_IMyClass, &LIBID_NVC_ATL_COMLib, /*wMajor =*/ 1, /*wMinor =*/ 0>,
public IDispatchImpl<IMyDualInterface, &__uuidof(IMyDualInterface), &LIBID_NVC_ATL_COMLib, /* wMajor = */ 1, /* wMinor = */ 0>
{
public:
DECLARE_CLASSFACTORY2(CMyLicense)
// Remainder of class declaration omitted
Требования
Заголовок: atlcom.h
CComCoClass::CreateInstance
Используйте эти CreateInstance функции для создания экземпляра COM-объекта и извлечения указателя интерфейса без использования COM-API.
template <class Q>
static HRESULT CreateInstance(Q** pp);
template <class Q>
static HRESULT CreateInstance(IUnknown* punkOuter, Q** pp);
Параметры
Q
COM-интерфейс, который должен быть возвращен через pp.
punkOuter
[in] Внешний неизвестный или контролируемый неизвестным агрегатом.
pp
[out] Адрес переменной указателя, получающей запрошенный указатель интерфейса при успешном создании.
Возвращаемое значение
Стандартное значение HRESULT. Описание возможных возвращаемых значений см. в разделе CoCreateInstance в пакете SDK для Windows.
Замечания
Используйте первую перегрузку этой функции для типичного создания объектов; используйте вторую перегрузку, если необходимо агрегировать созданный объект.
Класс ATL, реализующий обязательный COM-объект (т. е. класс, используемый в качестве первого параметра шаблона для CComCoClass), должен находиться в том же проекте, что и вызывающий код. Создание COM-объекта выполняется фабрикой классов, зарегистрированной для этого класса ATL.
Эти функции полезны для создания объектов, которые вы не позволили создавать внешние функции с помощью макроса OBJECT_ENTRY_NON_CREATEABLE_EX_AUTO . Они также полезны в ситуациях, когда вы хотите избежать COM-API по соображениям эффективности.
Обратите внимание, что интерфейс Q должен иметь идентификатор IID, который можно получить с помощью оператора __uuidof .
Пример
В следующем примере создается класс ATL, CDocument созданный мастером, CComCoClass производный от IDocument этого интерфейса. Класс регистрируется на карте объектов с помощью макроса OBJECT_ENTRY_NON_CREATEABLE_EX_AUTO, чтобы клиенты не могли создавать экземпляры документа с помощью CoCreateInstance.
CApplication — coClass, который предоставляет метод на одном из собственных COM-интерфейсов для создания экземпляров класса документов. В приведенном ниже коде показано, как легко создавать экземпляры класса документов с помощью элемента, CreateInstance унаследованного от CComCoClass базового класса.
STDMETHODIMP CMyApp::CreateDocument( /* [out, retval] */ IDocument** ppDoc)
{
*ppDoc = NULL;
return CMyDoc::CreateInstance(ppDoc);
}
CComCoClass::Error
Эта статическую функцию настраивает IErrorInfo интерфейс для предоставления клиенту сведений об ошибках.
static HRESULT WINAPI Error(
LPCOLESTR lpszDesc,
const IID& iid = GUID_NULL,
HRESULT hRes = 0);
static HRESULT WINAPI Error(
LPCOLESTR lpszDesc,
DWORD dwHelpID,
LPCOLESTR lpszHelpFile,
const IID& iid = GUID_NULL,
HRESULT hRes = 0);
static HRESULT WINAPI Error(
LPCSTR lpszDesc,
const IID& iid = GUID_NULL,
HRESULT hRes = 0);
static HRESULT WINAPI Error(
LPCSTR lpszDesc,
DWORD dwHelpID,
LPCSTR lpszHelpFile,
const IID& iid = GUID_NULL,
HRESULT hRes = 0);
static HRESULT WINAPI Error(
UINT nID,
const IID& iid = GUID_NULL,
HRESULT hRes = 0,
HINSTANCE hInst = _AtlBaseModule.GetResourceInstance());
static HRESULT Error(
UINT nID,
DWORD dwHelpID,
LPCOLESTR lpszHelpFile,
const IID& iid = GUID_NULL,
HRESULT hRes = 0,
HINSTANCE hInst = _AtlBaseModule.GetResourceInstance());
Параметры
lpszDesc
[in] Строка, описывающая ошибку. Версия Юникода Error указывает, что lpszDesc имеет тип LPCOLESTR; версия ANSI указывает тип LPCSTR.
iid
[in] IiD интерфейса, определяющего ошибку или GUID_NULL (значение по умолчанию), если ошибка определена операционной системой.
hRes
[in] HRESULT, который вы хотите вернуть вызывающему объекту. Значение по умолчанию равно 0. Дополнительные сведения о hRes см. в разделе "Примечания".
nID
[in] Идентификатор ресурса, в котором хранится строка описания ошибки. Это значение должно лежать между 0x0200 и 0xFFFF включительно. В отладочных сборках утверждение приведет к тому, что nID не индексирует допустимую строку. В сборках выпуска строка описания ошибки будет иметь значение "Неизвестная ошибка".
dwHelpID
[in] Идентификатор контекста справки для ошибки.
lpszHelpFile
[in] Путь и имя файла справки, описывающего ошибку.
hInst
[in] Дескриптор ресурса. По умолчанию этот параметр является _AtlModule::GetResourceInstance_AtlModule глобальным экземпляром CAtlModule.
Возвращаемое значение
Стандартное значение HRESULT. Дополнительные сведения см. в разделе "Заметки".
Замечания
Для вызова Errorобъект должен реализовать ISupportErrorInfo интерфейс.
Если параметр hRes не является ненулевой, возвращает значение Error. Если hRes равно нулю, первые четыре версии возвращаемого Error DISP_E_EXCEPTION. Последние две версии возвращают результат макроса MAKE_HRESULT( 1, FACILITY_ITF, nID).
CComCoClass::GetObjectCLSID
Предоставляет согласованный способ получения CLSID объекта.
static const CLSID& WINAPI GetObjectCLSID();
Возвращаемое значение
Идентификатор класса объекта.
CComCoClass::GetObjectDescription
Эта статическую функцию извлекает текстовое описание объекта класса.
static LPCTSTR WINAPI GetObjectDescription();
Возвращаемое значение
Описание объекта класса.
Замечания
Реализация по умолчанию возвращает ЗНАЧЕНИЕ NULL. Этот метод можно переопределить с помощью макроса DECLARE_OBJECT_DESCRIPTION . Например:
class ATL_NO_VTABLE CMyDoc :
public CComObjectRootEx<CComSingleThreadModel>,
public CComCoClass<CMyDoc, &CLSID_MyDoc>,
public IDocument
{
public:
DECLARE_OBJECT_DESCRIPTION("My Document Object 1.0")
// Remainder of class declaration omitted.
GetObjectDescription вызывается IComponentRegistrar::GetComponents.
IComponentRegistrar — это интерфейс службы автоматизации, позволяющий регистрировать и отменять регистрацию отдельных компонентов в библиотеке DLL. При создании объекта Регистратора компонентов с помощью мастера проектов ATL мастер автоматически реализует IComponentRegistrar интерфейс.
IComponentRegistrar обычно используется сервером транзакций Майкрософт.
Дополнительные сведения о мастере проектов ATL см. в статье "Создание проекта ATL".