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; }}
本人开发环境是: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的情况了