我來自c#背景,並認爲在某個層面上,我可以傳遞一個方法的引用。這似乎並非如此。相反,它要求您創建一個類,它的接口定義了它將調用的方法。然後您將該類的一個實例傳遞給SetCallback方法中的過濾器。當然似乎相比於委託或lambda表達式
這裏長篇大論是一個類實現ISampleGrabberCB的例子
class SampleGrabberCallback : public ISampleGrabberCB
{
public:
// Fake referance counting.
STDMETHODIMP_(ULONG) AddRef() { return 1; }
STDMETHODIMP_(ULONG) Release() { return 2; }
STDMETHODIMP QueryInterface(REFIID riid, void **ppvObject)
{
if (NULL == ppvObject) return E_POINTER;
if (riid == __uuidof(IUnknown))
{
*ppvObject = static_cast<IUnknown*>(this);
return S_OK;
}
if (riid == __uuidof(ISampleGrabberCB))
{
*ppvObject = static_cast<ISampleGrabberCB*>(this);
return S_OK;
}
return E_NOTIMPL;
}
STDMETHODIMP SampleCB(double Time, IMediaSample *pSample)
{
return E_NOTIMPL;
}
STDMETHODIMP BufferCB(double Time, BYTE *pBuffer, long BufferLen)
{
return E_NOTIMPL;
}
};
您好,我有確切的問題,所以可以請你分享抓住樣本的完整代碼?謝謝, – Basel 2014-04-26 11:50:57
是的,如果有一個工作代碼,你會分享嗎? – mbaros 2017-08-10 15:14:46