Способы определения и реализации COM интерфейсов на C++.

Рассмотрим два способа определения COM интерфейсов.

Первый способ заключается в том, чтобы самому вручную описывать COM объекты и интерфейсы при помощи макросов COM. Существуют два набора интерфейсных макросов COM : для определения интерфейса и для определения кокласса, реализующего интерфейсы.

DECLARE_INTERFACE_(IMyInterface,IUnknown)
{
  STDMETHOD(Fa)()           PURE;
  STDMETHOD(Fb)(int iCount) PURE;
}

class CMyComObject : public IMyInterface
{
public:
  STDMETHODIMP         QueryInterface(REFID riid,void** pIFace);
  STDMETHODIMP_(ULONG) AddRef();
  STDMETHODIMP_(ULONG) Release();

  STDMETHODIMP Fa();
  STDMETHODIMP Fb(int iCount);  
...
}

STDMETHODIMP_(ULONG) CMyComObject::AddRef()
{
  return ++m_iRefCount;
}

...
						

Другой способ - использовать язык описания интерфейсов IDL ( Interface Definition Language ). Вначале при помощи IDL мы описываем интерфейсы и компоненты. Затем данное описание обрабатывается компилятором MIDL, который генерирует код C++. При генерации кода на C++ используются макросы COM.

Пример описания интерфейса на IDL :

import "unknwn.idl";

[
  object,
  uuid(),
  helpstring("IMyInterface"),
  pointer_default(unique)
]

interface IMyInterface : IUnknown
{
  HRESULT Fa();
  HRESULT Fb([in] int x,[out] int* y,[in,out] int* z);
}
						


Hosted by uCoz