Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować się zalogować lub zmienić katalog.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
[Funkcja skojarzona z tą stroną, windows Media Format 11 SDK, jest starszą funkcją. Został zastąpiony przez Source Reader i Sink Writer. Czytnik źródła i Zapis ujścia zostały zoptymalizowane dla systemów Windows 10 i Windows 11. Firma Microsoft zdecydowanie zaleca, aby nowy kod używał czytnika źródeł i modułu zapisywania ujścia zamiast zestawu SDK windows Media Format 11, jeśli jest to możliwe. Firma Microsoft sugeruje, że istniejący kod, który używa starszych interfejsów API, należy przepisać go do korzystania z nowych interfejsów API, jeśli to możliwe.]
Obiekt zapisywania nie wysyła komunikatów do metody wywołania zwrotnego IWMStatusCallback::OnStatus. Można jednak ustawić ujścia zapisujące, aby przekazywać komunikaty do OnStatus. Każdy zlewozmywak musi być ustawiony tak, aby przekazywał stan oddzielnie, ale wszystkie zlewozmywaki mogą zgłaszać do tego samego wywołania zwrotnego.
Aby ustawić moduł odbiorczy w celu dostarczania komunikatów o stanie do OnStatus, wywołaj metodę IWMRegisterCallback::Advise.
Poniższy przykładowy kod pokazuje, jak ustawić wszystkie odbiorniki, aby dostarczały komunikaty o stanie do OnStatus wywołania zwrotnego. W tym przykładzie indeks każdego sinka będzie używany jako parametr kontekstu, aby metoda OnStatus mogła odróżnić komunikaty od różnych ujść. Aby uzyskać więcej informacji na temat korzystania z tego kodu, zobacz Using the Code Examples.
HRESULT SetSinksForStatus (IWMWriter* pWriter, IWMStatusCallback* pStatus)
{
HRESULT hr = S_OK;
DWORD cSinks = 0;
DWORD dwSinkIndex = 0;
IWMWriterAdvanced* pWriterAdvanced = NULL;
IWMWriterSink* pSink = NULL;
IWMRegisterCallback* pRegisterCallbk = NULL;
// Get the advanced writer interface.
hr = pWriter->QueryInterface(IID_IWMWriterAdvanced,
(void**)&pWriterAdvanced);
GOTO_EXIT_IF_FAILED(hr);
// Get the number of sinks that are added to the writer object.
hr = pWriterAdvanced->GetSinkCount(&cSinks);
GOTO_EXIT_IF_FAILED(hr);
// Loop through all of the sinks.
for(dwSinkIndex = 0; dwSinkIndex < cSinks; dwSinkIndex++)
{
// Get the base interface for the next sink.
hr = pWriterAdvanced->GetSink(dwSinkIndex, &pSink);
GOTO_EXIT_IF_FAILED(hr);
// Get the callback registration interface for the sink.
hr = pSink->QueryInterface(IID_IWMRegisterCallback,
(void**)&pRegisterCallbk);
GOTO_EXIT_IF_FAILED(hr);
// Register the OnStatus callback.
hr = pRegisterCallbk->Advise(pStatus, (void*) &dwSinkIndex);
GOTO_EXIT_IF_FAILED(hr);
// Release for the next iteration.
SAFE_RELEASE(pSink);
SAFE_RELEASE(pRegisterCallbk);
} // end for dwSinkIndex
Exit:
SAFE_RELEASE(pSink);
SAFE_RELEASE(pRegisterCallbk);
SAFE_RELEASE(pWriterAdvanced);
return hr;
}
Tematy pokrewne