VC6.0下DirectShow开发环境配置

本文介绍如何下载并安装DirectX SDK,编译DirectShow基础类库,并通过一个示例程序展示如何使用这些库来播放媒体文件。文章详细说明了配置编译环境、解决链接错误的过程。

1 下载SDKDirectX9.0b (要含有directshowDirectX) 然后安装

 

2 编译

  打开<SDK root>/Samples/C++/DirectShow/BaseClasses/baseclasses.dspdegug编译得到Strmbasd.librelease 编译得到strmbase.lib

 

3 添加inludelib信息(Tools->Options->Directories 

  Include - 添加<SDK root>/Include 

          -添加<SDK root>/SAMPLES/C++/DIRECTSHOW/BASECLASSES[1]

 

Lib      - 添加<SDK root>/Lib 

-        <SDK root>/SAMPLES/C++/DirectShow/BASECLASSES/DEBUG  

 

4 Project->Setting->Link 中添加Strmbasd.lib [2]

 

[1]:此处添加streams.h所在路径,路径可能有所不同

[2]:步骤4缺,将导致

error LNK2001: unresolved external symbol _IID_IMediaEvent

error LNK2001: unresolved external symbol _IID_IMediaControl

error LNK2001: unresolved external symbol _CLSID_FilterGraph

error LNK2001: unresolved external symbol _IID_IGraphBuilder

Debug/Howtoplayafile.exe : fatal error LNK1120: 4 unresolved externals

Error executing link.exe. 

 

测试代码:

void main(void) 



{ 
    IGraphBuilder *pGraph = NULL; 

    IMediaControl *pControl = NULL; 

    IMediaEvent   *pEvent = NULL; 

    // Initialize the COM library. 

    HRESULT hr = CoInitialize(NULL); 

    if (FAILED(hr)) 

    { 

        printf("ERROR - Could not initialize COM library"); 

        return; 

    } 

    // Create the filter graph manager and query for interfaces. 

    hr = CoCreateInstance(CLSID_FilterGraph, NULL, CLSCTX_INPROC_SERVER, 

              IID_IGraphBuilder, (void **)&pGraph); 

    if (FAILED(hr)) 

    { 

        printf("ERROR - Could not create the Filter Graph Manager."); 

        return; 

    } 

    hr = pGraph->QueryInterface(IID_IMediaControl, (void **)&pControl); 

    hr = pGraph->QueryInterface(IID_IMediaEvent, (void **)&pEvent); 

    // Build the graph. IMPORTANT: Change this string to a file on your system. 

       //    hr = pGraph->RenderFile(L"C://Example.avi", NULL); 

    hr = pGraph->RenderFile(L"C://DXSDK//Samples//Media//chicken.wmv", NULL); // 打开一个媒体文件 

    if (SUCCEEDED(hr)) 

    { 

        // Run the graph. 

        hr = pControl->Run(); 

        if (SUCCEEDED(hr)) 

        { 

            // Wait for completion. 

            long evCode; 

            pEvent->WaitForCompletion(INFINITE, &evCode); 

            // Note: Do not use INFINITE in a real application, because it 

            // can block indefinitely. 

        } 

    } 

    pControl->Release(); 

    pEvent->Release(); 

    pGraph->Release(); 

    CoUninitialize(); 

} 
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值