Obtention de messages d’erreur à partir d’un récepteur
L’objet Writer n’envoie pas de messages à la méthode de rappel IWMStatusCallback :: OnStatus . Toutefois, vous pouvez définir des récepteurs d’écriture pour envoyer des messages à OnStatus. Chaque récepteur doit être défini pour fournir l’État séparément, mais tous les récepteurs peuvent signaler le même rappel.
Pour définir un récepteur pour remettre des messages d’État à OnStatus, appelez la méthode IWMRegisterCallback :: Advise .
L’exemple de code suivant montre comment définir tous les récepteurs pour remettre des messages d’État à un rappel OnStatus . Dans cet exemple, l’index de chaque récepteur sera utilisé comme paramètre de contexte afin que la méthode OnStatus puisse faire la différence entre les messages des différents récepteurs. Pour plus d’informations sur l’utilisation de ce code, consultez utilisation des exemples de code.
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;
}