此項目為win32下的控制台C++代碼(別忘記配置DShow庫)
1 // movie_test.cpp : 定義控制台應用程序的入口點。
2 //
3 #include "stdafx.h"
4 #include <DShow.h>
5
6 #pragma comment(lib,"strmiids.lib") // 也可以在屬性裡面添加
7
8 int _tmain(int argc, _TCHAR* argv[])
9 {
10 IGraphBuilder *pGraph = NULL; // 圖標管理器接口
11 IMediaControl *pControl = NULL; // 媒體控制器接口
12 IMediaEvent *pEvent = NULL; // 媒體事件接口
13
14 // 初始化com庫
15 HRESULT hr = CoInitialize(NULL);
16 if(FAILED(hr))
17 {
18 printf("初始化com組件失敗\n");
19 return -1;
20 }
21
22 // 創建濾波器鏈表管理器
23 hr = CoCreateInstance(CLSID_FilterGraph,NULL,CLSCTX_INPROC_SERVER,IID_IGraphBuilder,(void **)&pGraph);
24 if(FAILED(hr))
25 {
26 printf("初始化com組件失敗\n");
27 return -1;
28 }
29
30 //查詢媒體控制和媒體事件接口
31 hr = pGraph->QueryInterface(IID_IMediaControl,(void **)&pControl);
32 hr = pGraph->QueryInterface(IID_IMediaEvent,(void **)&pEvent);
33
34 //建立鏈表,這裡用戶可以更改待播放的文件的名稱
35 hr = pGraph->RenderFile(L"E:\\DXSDK\\DXSDK 9.0B\\Samples\\Media\\ruby.avi",NULL);
36 if(SUCCEEDED(hr))
37 {
38 //運行鏈表
39 hr = pControl->Run();
40 if(SUCCEEDED(hr))
41 {
42 //等待回放結束
43 long evCode;
44 pEvent->WaitForCompletion(INFINITE,&evCode);
45 // 切記:在實際應用中,不能使用INFINITE標識,因為他會不確定的阻塞程序
46 }
47 }
48
49 // 釋放所有資源
50 pControl->Release();
51 pEvent->Release();
52 pGraph->Release();
53 CoUninitialize();
54 printf("this is example\n");
55 return 0;
56 }