Registrazione degli errori DES: codice di esempio
[La funzionalità associata a questa pagina, DirectShow, è una funzionalità legacy. È stata sostituita da MediaPlayer, FMMediaEngine e Audio/Video Capture in Media Foundation. Queste funzionalità sono state ottimizzate per Windows 10 e Windows 11. Microsoft consiglia vivamente che il nuovo codice usi MediaPlayer, FMMediaEngine e Audio/Video Capture in Media Foundation anziché DirectShow, quando possibile. Microsoft suggerisce che il codice esistente che usa le API legacy venga riscritto per usare le nuove API, se possibile.
[Questa API non è supportata e può essere modificata o non disponibile in futuro.]
Il codice di esempio seguente presenta un'applicazione console completa che carica e visualizza un file di progetto XML directShow Editing Services usando la classe di registrazione degli errori descritta in questa sezione. Vedere Errori di registrazione. Il nome del file di progetto è hardcoded nell'applicazione.
Per rendere il codice più breve, l'applicazione console usa puntatori intelligenti ATL, che rimuove la necessità di chiamare QueryInterface e Release. Se si preferisce, è possibile modificare l'applicazione di esempio in Caricamento e anteprima di un progetto. Aggiungere semplicemente il codice visualizzato nella sezione precedente.
#include <atlbase.h>
#include <dshow.h>
#include <qedit.h>
#include <stdio.h>
// Declare error logging class.
class CErrReporter;
// (The implementation of CErrReporter was given previously.)
void __cdecl main(void)
{
HRESULT hr = CoInitialize(NULL);
if (FAILED(hr))
{
// Error handling is omitted for clarity.
}
{ // Scope for smart pointers.
CComPtr<IAMTimeline> pTL;
CComPtr<IRenderEngine> pRenderEngine;
CComPtr<IXml2Dex> pXML;
CComPtr<IGraphBuilder> pGraph;
hr = CoCreateInstance(CLSID_AMTimeline, NULL, CLSCTX_INPROC_SERVER,
IID_IAMTimeline, (void**) &pTL);
hr = CoCreateInstance(CLSID_Xml2Dex, NULL, CLSCTX_INPROC_SERVER,
IID_IXml2Dex, (void**) &pXML);
hr = CoCreateInstance(CLSID_RenderEngine, NULL, CLSCTX_INPROC_SERVER,
IID_IRenderEngine, (void**) &pRenderEngine);
// Set the error log.
CComQIPtr<IAMSetErrorLog, &IID_IAMSetErrorLog> pSetLog(pTL);
if (pSetLog)
{
IAMErrorLog *pLog = new CErrReporter;
pSetLog->put_ErrorLog(pLog);
}
// Load and preview the project.
CComBSTR bstrFile(OLESTR("C:\\example.xtl"));
hr = pXML->ReadXMLFile(pTL, bstrFile);
if (SUCCEEDED(hr))
{
hr = pRenderEngine->SetTimelineObject(pTL);
hr = pRenderEngine->ConnectFrontEnd( );
hr = pRenderEngine->RenderOutputPins( );
hr = pRenderEngine->GetFilterGraph(&pGraph);
CComQIPtr<IMediaControl, &IID_IMediaControl> pControl(pGraph);
CComQIPtr<IMediaEvent, &IID_IMediaEvent> pEvent(pGraph);
pControl->Run();
long evCode;
hr = pEvent->WaitForCompletion(INFINITE, &evCode);
pControl->Stop();
}
// Clean up.
pRenderEngine->ScrapIt();
}
CoUninitialize();
}
Argomenti correlati