请教一个关于查询Filter 上Pin的问题,急!!!

yanhuigang 2008-04-05 12:56:33
我发现一个奇怪的问题, 当我调用 pPin->QueryDirection(&pindir); 查询了Pin引脚的输出方向后,居然发现pPin指针居然就被置空了,这样我就没法连接两个Filter之间的Pin。 函数代码如下: 有那位高手能够帮忙解释下?? 谢谢了

HRESULT GetUnConnectedPin( IBaseFilter * pFilter, PIN_DIRECTION dirrequired, IPin **ppPin)
{
IEnumPins *pEnum;
*ppPin = NULL;

HRESULT hr = pFilter->EnumPins(&pEnum);
if(FAILED(hr))
{
return hr;
}

IPin *pPin = NULL;
hr = E_FAIL;

while(S_OK == pEnum->Next(1, &pPin, NULL))
{
PIN_DIRECTION pindir;
hr = pPin->QueryDirection(&pindir);
if(pindir == dirrequired)
{
IPin *pTmpPin = NULL;
hr = pPin->ConnectedTo(&pTmpPin);
if(SUCCEEDED(hr))
{
pTmpPin->Release();
}
else
{
*ppPin = pPin;
}
} // if

pPin->Release();

} // while

pEnum->Release();
return hr;
}
...全文
71 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
yanhuigang 2008-04-05
  • 打赏
  • 举报
回复
再仔细说明一下, 我是跟踪到这个函数中的 hr = pPin->QueryDirection(&pindir); 这个调用后,发现pPin指针就变成NULL了,怎么回事呢?
yanhuigang 2008-04-05
  • 打赏
  • 举报
回复
回复3楼的:
确实是pPin的值在调用pPin->QueryDirection(&pindir); 后就复位成NULL了, 而在调用这个函数之前我查看过pPin都不是NULL的。
所以我才觉得很奇怪啊。
yanhuigang 2008-04-05
  • 打赏
  • 举报
回复
请教一下楼上的, 该如何查看pEnum中的各pPin呢? 在Debug的时候查看pEnum的内存? 但是显示的都是一些地址值,看不出来什么啊。
scq2099yt 2008-04-05
  • 打赏
  • 举报
回复
up
rageliu 2008-04-05
  • 打赏
  • 举报
回复
QueryDirection这个函数不会修改pPin的,问题不在这里

IPin *pTmpPin = NULL; //这里pTmpPin 设置为NULL
hr = pPin->ConnectedTo(&pTmpPin); //上面pTmpPin = NULL了,这里当然会有问题。

你的问题描述错误吧,是pTmpPin = NULL而不是pPin = NULL?????????
CathySun118 2008-04-05
  • 打赏
  • 举报
回复
HRESULT hr = pFilter->EnumPins(&pEnum);
在这里看看pEnum中的各pPin是什么

19,470

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 图形处理/算法
社区管理员
  • 图形处理/算法社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧