Programming/Language

COM (7/9) - 변환 중

부풍 2009. 7. 9. 21:14
interface ISimpleCal : IUnknown
{
virtual int __stdcall Sum() = 0;
virtual int __stdcall Sub() = 0;
}
요놈을 밑의 매크로로 변환
//#define DECLARE_INTERFACE_(iface, baseiface)
// interface iface : public baseiface


//#define STDMETHOD(method) virtual HRESULT STDMETHODCALLTYPE method
//#define STDMETHODCALLTYPE __stdcall

//#define STDMETHOD_(type, method) virtual type STDMETHODCALLTYPE method
DECLARE_INTERFACE_(ISimpleCal, IUnknown)
{
STDMETHOD_(int, Sum)() PURE;
STDMETHOD_(int, Sub)() PURE;
};





class XCInnerSetValue : public ISetValue
{
..........
}
class XCInnerSimpleCal : public ISimpleCal
{
...............
}
위 클래스들이 밑의 매크로로 변환

BEGIN_INTERFACE_PART(CInnerSetValue, ISetValue)
STDMETHOD_(void, SetValue)(int x1, int y1);
END_INTERFACE_PART(CInnerSetValue)

BEGIN_INTERFACE_PART(CInnerSimpleCal, ISimpleCal)
STDMETHOD_(int, Sum)();
STDMETHOD_(int, Sub)();
END_INTERFACE_PART(CInnerSimpleCal)

//#define BEGIN_INTERFACE_PART(localClass, baseClass) \
// class X##localClass : public baseClass \
// { \
// public:
// STDMETHOD_(ULONG, AddRef)(); \
// STDMETHOD_(ULONG,Release)(); \
// STDMETHOD(QUeryInterface)(REFIID iid, LPVOID* ppvObj)

//#define END_INTERFACE_PART(localClass) \
// } m_x##localClass; \
// friend class X##localClass; \


...................................


ULONG, , HRESULT~~ 밑 변환

STDMETHODIMP_(ULONG)
CSimpleCalc::XCinnerSetValue::AddRef()
{
METHOD_PROLOGUE(CSimpleCalc, CInnerSetValue)
// int a = offsetof(CSimpleCalc, CInnerSetValue);
// CSimpleCalc* pThis = (CSimpleCalc*) ((BYTE*) this)

return pThis->ExternalAddRef();
}