Класс 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 для негрегатированного объекта. Однако вызовы QueryInterface
AddRef
и 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
Общие сведения о классе