DES 错误日志记录:示例代码
[与此页面关联的功能 DirectShow 是旧版功能。 它已被 MediaPlayer、 IMFMediaEngine 和 Media Foundation 中的音频/视频捕获所取代。 这些功能已针对Windows 10和Windows 11进行了优化。 Microsoft 强烈建议新代码尽可能在 Media Foundation 中使用 MediaPlayer、 IMFMediaEngine 和 音频/视频捕获 ,而不是 DirectShow。 如果可能,Microsoft 建议重写使用旧 API 的现有代码以使用新 API。]
[此 API 不受支持,将来可能会更改或不可用。]
以下示例代码演示了一个完整的控制台应用程序,该应用程序使用本节中所述的错误日志记录类加载和预览 DirectShow Editing Services XML 项目文件。 (请参阅 日志记录错误。) 项目文件的名称已硬编码到应用程序中。
为了缩短代码,控制台应用程序使用 ATL 智能指针,无需调用 QueryInterface 和 Release。 如果需要,可以在 加载和预览项目中修改示例应用程序。 只需添加上一部分中显示的代码即可。
#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();
}
相关主题