Рассмотрим два способа определения 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);
}
|