Freigeben über


Abrufen von Fehlermeldungen von einer Senke

[Das dieser Seite zugeordnete Feature Windows Media Format 11 SDK ist ein Legacyfeature. Es wurde von Source Reader und Sink Writer abgelöst. Source Reader und Sink Writer wurden für Windows 10 und Windows 11 optimiert. Microsoft empfiehlt dringend, dass neuer Code nach Möglichkeit quellleser und Senkenschreiber anstelle des Windows Media Format 11 SDK verwendet. Microsoft schlägt vor, dass vorhandener Code, der die Legacy-APIs verwendet, so umgeschrieben wird, dass nach Möglichkeit die neuen APIs verwendet werden.]

Das Writer-Objekt sendet keine Nachrichten an die IWMStatusCallback::OnStatus-Rückrufmethode . Sie können jedoch Writer-Senken so festlegen, dass Nachrichten an OnStatus gesendet werden. Jede Senke muss so festgelegt werden, dass status separat übermittelt wird, aber alle Senken können an denselben Rückruf melden.

Um festzulegen, dass eine Senke status Nachrichten an OnStatus übermittelt, rufen Sie die IWMRegisterCallback::Advise-Methode auf.

Der folgende Beispielcode veranschaulicht, wie alle Senken so festgelegt werden, dass status Nachrichten an einen OnStatus-Rückruf übermittelt werden. In diesem Beispiel wird der Index jeder Senke als Kontextparameter verwendet, damit die OnStatus-Methode zwischen Nachrichten aus den verschiedenen Senken unterscheiden kann. Weitere Informationen zur Verwendung dieses Codes finden Sie unter Verwenden der Codebeispiele.

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;
}

IWMRegisterCallback-Schnittstelle

Arbeiten mit Writer-Senken