首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > 编程 >

win7 graphedit调试(程序中filter是如何连接的)

2012-09-15 
win7 graphedit调试(程序中filter是怎么连接的)在我们编程构建filter链路之前,我们怎么来证明构思中的filt

win7 graphedit调试(程序中filter是怎么连接的)
    在我们编程构建filter链路之前,我们怎么来证明构思中的filter链路是切实可行的呢?最常用的方法是,首先在graphedit中验证,然后再以graphedit中的filter链路为模型在程序中实现。

    在程序中构建完filter链路后,有时候并不会马上能够正常运行。要是能够“直观地”看到在程序中filter是怎么连接的,问题就要好办 一点了。实际上,GraphEdit也提供了这样一种能够显示其它应用程序创建的FilterGraph的功能。

    要实用GraphEdit的这个功能,在程序中创建了加入:

//////////////////////// For GraphEdit Dubug purpose /////////////////////////////void CDXGraph::AddToObjectTable(void){IMoniker * pMoniker = 0;    IRunningObjectTable * objectTable = 0;    if (SUCCEEDED(GetRunningObjectTable(0, &objectTable))) {WCHAR wsz[256];wsprintfW(wsz, L"FilterGraph %08p pid %08x", (DWORD_PTR)mGraph, GetCurrentProcessId());HRESULT hr = CreateItemMoniker(L"!", wsz, &pMoniker);if (SUCCEEDED(hr)) {hr = objectTable->Register(0, mGraph, pMoniker, &mObjectTableEntry);pMoniker->Release();}objectTable->Release();}}void CDXGraph::RemoveFromObjectTable(void){IRunningObjectTable * objectTable = 0;    if (SUCCEEDED(GetRunningObjectTable(0, &objectTable))) {        objectTable->Revoke(mObjectTableEntry);        objectTable->Release();mObjectTableEntry = 0;    }}

在DirectShow开发指南中提示:GraphEdit的这个功能仅在Windows2000或Windows XP上支持。那么在win7 系统下能用GraphEdit的辅助调试功能?

本人开发环境是:win7(64bit)+vs2010

开始发现并不能用GraphEdit的辅助调试功能,原因:

windows7将一部分功能从quartz.dll转移到了proppage.dll,所以需要以管理员身份在命令行窗口手动注册一下regsvr32 proppage.dll

win7 下配置Directshow 见http://blog.csdn.net/luckyboy101/article/details/7801173

proppage.dll 目录为C:\Program Files\Microsoft SDKs\Windows\v7.1\Bin

以管理员身份注册:regsvr32 C:\Program Files\Microsoft SDKs\Windows\v7.1\Bin

注册成功后,运行vs2010项目,然后打开GraphEdit->File->connet to remote graph...就可以显示filter的情况了


热点排行