请教如何使用memfile

zjm208 2011-01-27 11:30:44
我以memfile为基础做了一个播放网络时实流的source filter,其中CMemReader与例子中完全一样,但传给MemStream类的构造函数的参数是一个回调函数指针,我希望用这个回调函数来读取网络数据流。但在debug时发现,调用CUnknown的构造函数时,总是无法将CUnknown的this指针赋值给它的成员变量m_pUnknown,m_pUnknown = reinterpret_cast<LPUNKNOWN>( static_cast<PNDUNKNOWN>(this) )这一句执行之后,m_pUnknown值仍然是0x00001。请问这是什么原因?
...全文
148 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
zjm208 2011-01-29
  • 打赏
  • 举报
回复
谢谢dengzikun!
UUcall007 2011-01-28
  • 打赏
  • 举报
回复
memfile主要是处理数据的
zjm208 2011-01-28
  • 打赏
  • 举报
回复
我的FILTER没有被聚合,用法和memfile中是一样的,我debug时发现,CUnknown构造函数执行之前_pUnknown的值就是0x00001,执行后仍然是0x00001,而且我在CUnknown中添加一个新的成员变量后,也无法在构造函数中给新变量赋值。
dengzikun 2011-01-28
  • 打赏
  • 举报
回复
如果你的FILTER没有被聚合,那么m_pUnknown应该指向FILTER自身,
如果被聚合,应该指向外部的聚合对象。不应该是0x00001。确认m_pUnknown
的值是0x00001?
dengzikun 2011-01-28
  • 打赏
  • 举报
回复
出现这种情况,一般比较麻烦。
检查代码,猜测可能出错的地方。

逐步排除,
你可以试着把一些你认为可能会有问题的代码注释掉,然后测试,看结果。
zjm208 2011-01-28
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 dengzikun 的回复:]
可能是内存溢出,m_pUnknown被破坏了。
[/Quote]
那是什么原因呢?有什么办法能解决吗?
dengzikun 2011-01-28
  • 打赏
  • 举报
回复
可能是内存溢出,m_pUnknown被破坏了。
zjm208 2011-01-28
  • 打赏
  • 举报
回复
谢谢dengzikun!我在CUnknown构造函数中把值打印出来,结果是对的,但是下一步调用CMemReader的AddRef()时,实际上是执行GetOwner()->AddRef()(参见DECLARE_IUNKNOWN的定义),而我这时在GetOwner()中将m_pUnknown的值打印出来,却又变成0X0000001了,结果造成访问冲突,程序无法继续执行下去。这是什么原因呢?
dengzikun 2011-01-28
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 zjm208 的回复:]
我的FILTER没有被聚合,用法和memfile中是一样的,我debug时发现,CUnknown构造函数执行之前_pUnknown的值就是0x00001,执行后仍然是0x00001,而且我在CUnknown中添加一个新的成员变量后,也无法在构造函数中给新变量赋值。
[/Quote]

把值打印出来,确认一下。有时候在调试环境下看到的并不准确。

2,541

社区成员

发帖
与我相关
我的任务
社区描述
专题开发/技术/项目 多媒体/流媒体开发
社区管理员
  • 多媒体/流媒体开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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