Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Этот класс предоставляет методы для создания экземпляров класса и получения его свойств.
Синтаксис
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 созданный мастером, IDocument производный от CComCoClass этого интерфейса. Класс регистрируется на карте объектов с помощью макроса 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. Если 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".