Поделиться через


Класс CComObject

Этот класс реализует IUnknown для негрегатированного объекта.

Синтаксис

template<class Base>
class CComObject : public Base

Параметры

Основание
Класс, производный от CComObjectRoot или CComObjectRootEx, а также от любых других интерфейсов, которые требуется поддерживать в объекте.

Участники

Открытые конструкторы

Имя Описание
CComObject::CComObject Конструктор.
CComObject::~CComObject Деструктор

Открытые методы

Имя Описание
CComObject::AddRef Увеличивает число ссылок для объекта.
CComObject::CreateInstance (статический) Создает новый CComObject объект.
CComObject::QueryInterface Извлекает указатель на запрошенный интерфейс.
CComObject::Release Уменьшает количество ссылок для объекта.

Замечания

CComObjectреализует IUnknown для негрегатированного объекта. Однако вызовы QueryInterfaceAddRefи Release делегированыCComObjectRootEx.

Дополнительные сведения об использовании CComObjectсм. в статье "Основы com-объектов ATL".

Иерархия наследования

Base

CComObject

Требования

Заголовок: atlcom.h

CComObject::AddRef

Увеличивает число ссылок для объекта.

STDMETHOD_(ULONG, AddRef)();

Возвращаемое значение

Эта функция возвращает новое добавочное число ссылок для объекта. Это значение может быть полезно для диагностика или тестирования.

CComObject::CComObject

Конструктор увеличивает число блокировок модуля.

CComObject(void* = NULL);

Параметры

пустота*
[in] Этот неименованный параметр не используется. Он существует для симметрии с другими CComXXXObjectXXX конструкторами.

Замечания

Деструктор уменьшает его.

Если производный объект успешно построен с помощью new оператора, начальное CComObjectчисло ссылок равно 0. Чтобы задать счетчик ссылок соответствующим значением (1), вызовите функцию AddRef .

CComObject::~CComObject

Деструктор

CComObject();

Замечания

Освобождает все выделенные ресурсы, вызывает FinalRelease и уменьшает число блокировок модуля.

CComObject::CreateInstance

Эта статическую функцию позволяет создать новый объект CComObject<>Base без дополнительных расходов CoCreateInstance.

static HRESULT WINAPI CreateInstance(CComObject<Base>** pp);

Параметры

pp
[out] Указатель на указатель CComObject><Base. Если CreateInstance ошибка не выполнена, для pp задано значение NULL.

Возвращаемое значение

Стандартное значение HRESULT.

Замечания

Возвращенный объект имеет число ссылок нулю, поэтому вызов AddRef немедленно используйте Release для освобождения ссылки на указатель объекта после завершения.

Если вам не нужен прямой доступ к объекту, но по-прежнему требуется создать новый объект без дополнительных CoCreateInstanceзатрат, используйте CComCoClass::CreateInstance .

Пример

class ATL_NO_VTABLE CMyCircle :
   public CComObjectRootEx<CComSingleThreadModel>,
   public CComCoClass<CMyCircle, &CLSID_MyCircle>,
   public IDispatchImpl<IMyCircle, &IID_IMyCircle, &LIBID_NVC_ATL_COMLib, /*wMajor =*/ 1, /*wMinor =*/ 0>
{
public:
   CMyCircle()
   {
   }

DECLARE_REGISTRY_RESOURCEID(IDR_MYCIRCLE)

DECLARE_NOT_AGGREGATABLE(CMyCircle)

BEGIN_COM_MAP(CMyCircle)
   COM_INTERFACE_ENTRY(IMyCircle)
   COM_INTERFACE_ENTRY(IDispatch)
END_COM_MAP()



   DECLARE_PROTECT_FINAL_CONSTRUCT()

   HRESULT FinalConstruct()
   {
      return S_OK;
   }

   void FinalRelease()
   {
   }

public:

public:
   STDMETHOD(get_XCenter)(double* pVal);
};

 

// Create a local instance of COM object CMyCircle.
double x;
CComObject<CMyCircle>* pCircle;
HRESULT hRes = CComObject<CMyCircle>::CreateInstance(&pCircle);
ATLASSERT(SUCCEEDED(hRes));

// Increment reference count immediately
pCircle->AddRef();

// Access method of COM object
hRes = pCircle->get_XCenter(&x);

// Decrement reference count when done
pCircle->Release();
pCircle = NULL;

CComObject::QueryInterface

Извлекает указатель на запрошенный интерфейс.

STDMETHOD(QueryInterface)(REFIID iid, void** ppvObject);
template <class Q>
HRESULT STDMETHODCALLTYPE QueryInterface(Q** pp);

Параметры

iid
[in] Идентификатор запрашиваемого интерфейса.

ppvObject
[out] Указатель на указатель интерфейса, определяемый iid. Если объект не поддерживает этот интерфейс, ppvObject имеет значение NULL.

pp
[out] Указатель на указатель интерфейса, определяемый по типу Q. Если объект не поддерживает этот интерфейс, для pp задано значение NULL.

Возвращаемое значение

Стандартное значение HRESULT.

CComObject::Release

Уменьшает количество ссылок для объекта.

STDMETHOD_(ULONG, Release)();

Возвращаемое значение

Эта функция возвращает новое отложенное число ссылок на объект. В отладочных сборках возвращаемое значение может быть полезно для диагностика или тестирования. В сборках, отличных от отладки, Release всегда возвращается значение 0.

См. также

Класс CComAggObject
Класс CComPolyObject
DECLARE_AGGREGATABLE
DECLARE_NOT_AGGREGATABLE
Общие сведения о классе