Получение сообщений об ошибках от входного узла
[Функция, связанная с этой страницей, Windows Media Format 11 SDK, является устаревшей. Он был заменён на средство чтения источника и средство записи приемника . Чтение источников и Запись в приемник оптимизированы для Windows 10 и Windows 11. Корпорация Майкрософт настоятельно рекомендует для нового кода, по возможности, использовать интерфейс-источник и интерфейс-приемник вместо Windows Media Format 11 SDK. Корпорация Майкрософт предлагает, что существующий код, использующий устаревшие API, будет перезаписан для использования новых API, если это возможно.]
Объект записи не отправляет сообщения в метод IWMStatusCallback::OnStatus. Однако приемники записи можно задать для отправки сообщений в OnStatus. Каждый синк должен быть настроен для передачи состояния отдельно, но все синки могут сообщать в один и тот же callback.
Чтобы задать приемник для доставки сообщений о состоянии в OnStatus, вызовите метод IWMRegisterCallback::Advise.
В следующем примере кода показано, как задать все приемники для доставки сообщений о состоянии в обратный вызов OnStatus. В этом примере индекс каждого приемника будет использоваться в качестве параметра контекста, чтобы метод OnStatus может различать сообщения от разных приемников. Дополнительные сведения об использовании этого кода см. в разделе Использование примеров кода.
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;
}
Связанные разделы