
#include "stdafx.h"

class CEventSink : 
	public CComObjectRootEx<CComSingleThreadModel>,
	public IDispEventImpl<0, CEventSink, &DIID__ICaoControllerEvents, &LIBID_CAOLib, 1, 0>
{
public:
	CEventSink(){}

BEGIN_COM_MAP(CEventSink)
	COM_INTERFACE_ENTRY_IID(DIID__ICaoControllerEvents, CEventSink)
END_COM_MAP()

BEGIN_SINK_MAP(CEventSink)
	SINK_ENTRY_EX(0, DIID__ICaoControllerEvents, 1, OnMessage)
END_SINK_MAP()

	STDMETHODIMP OnMessage(IUnknown* pIMessage)
	{
		USES_CONVERSION;
		CComVariant vntVal;
		CComPtr<ICaoMessage> pIMsg;
		HRESULT hr = pIMessage->QueryInterface(IID_ICaoMessage, (void**)&pIMsg);
		hr = pIMsg->get_Value(&vntVal);
		if (SUCCEEDED(hr) && vntVal.vt == VT_BSTR) {
			std::cout << "* OnMessage : " << W2A(vntVal.bstrVal) << std::endl;
		}
		return hr;
	}
};
