COM 接收器,接收不到事件信息
//class CSinkObj
#import "AxisMediaParser.dll" no_namespace named_guids
class ATL_NO_VTABLE CSinkObj :
public CComObjectRootEx<CComSingleThreadModel>,
public CComCoClass<CSinkObj, &CLSID_SinkObj>,
public IDispatchImpl<ISinkObj, &IID_ISinkObj, &/*LIBID_AxisMediaParserLib*/LIBID_ATLEVNTLib>,
public IDispEventImpl<IDC_SRCOBJ, CSinkObj, &DIID_IAxisMediaParserEvents, &LIBID_AxisMediaParserLib, 1, 0>
{
public:
CSinkObj()
{
}
DECLARE_REGISTRY_RESOURCEID(IDR_SINKOBJ)
DECLARE_PROTECT_FINAL_CONSTRUCT()
BEGIN_COM_MAP(CSinkObj)
COM_INTERFACE_ENTRY(ISinkObj)
COM_INTERFACE_ENTRY(IDispatch)
END_COM_MAP()
BEGIN_SINK_MAP(CSinkObj)
SINK_ENTRY_EX(IDC_SRCOBJ, DIID_IAxisMediaParserEvents, 1, OnVideoSample32)
END_SINK_MAP()
void __stdcall OnVideoSample32(long CookieID, long SampleType, long SampleFlags, long StartTimeLow, long StartTimeHigh, long StopTimeLow, long StopTimeHigh, const VARIANT& SampleArray)
{
AtlTrace("OnVideoSample\n");
}
}
以下为调用:
HRESULT hRes = CoInitializeEx(NULL, COINIT_MULTITHREADED);
HRESULT hr = m_spSrcObj.CoCreateInstance(OLESTR("AxisMediaParserLib.AxisMediaParser"));
HRESULT hr = CComObject<CSinkObj>::CreateInstance(&m_pSinkObj);
m_pSinkObj->AddRef();
_ASSERTE(SUCCEEDED(hr));
hr = m_pSinkObj->DispEventAdvise(m_spSrcObj);
m_spSrcObj->PutMediaPassword(PASSWORD);
m_spSrcObj->PutMediaURL(URL_PROTOCOL);
m_spSrcObj->PutMediaUsername(LOGIN);
LONG lConnectionCookie; LONG lNumberOfStreams; VARIANT MediaType;
m_spSrcObj->Connect(&lConnectionCookie, &lNumberOfStreams, &MediaType);
long videoCode = 0;
m_spSrcObj->GetVideoCodec(&videoCode);
m_spSrcObj->Start();
调用方法成功,但OnVideoSample32接收不到事件消息.
请大佬指点一下,是不是接收器写得不对,多谢!