DES 錯誤記錄:範例程式碼
[與此頁面相關的功能 DirectShow是舊版功能。 它已被 MediaPlayer、 IMFMediaEngine和 Media Foundation 中的音訊/視訊擷取取代。 這些功能已針對Windows 10和Windows 11進行優化。 Microsoft 強烈建議新程式碼盡可能使用 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();
}
相關主題