调用Run函数时,内部好像先调用Pause函数,在调用Run函数,我程序不知道为什么在调用Pause后Filter直接析构,在析构出出错 堆栈为:
  FltNtrcvr.ax!CMySourceFilter::~CMySourceFilter()  行115 + 0x3b C++
  FltNtrcvr.ax!CMySourceFilter::`scalar deleting destructor'()  + 0x2b C++
  quartz.dll!7cfa208b() 
  quartz.dll!7cfa20ef() 
  quartz.dll!7cf8be94() 
  quartz.dll!7cfa1e72() 
  FltNtrcvr.ax!CCritSec::Unlock()  行997 + 0xc C++
  FltNtrcvr.ax!CBaseReferenceClock::GetTime(__int64 * pTime=0x0012ed68)  行143 C++
  003d90f8()
  quartz.dll!7cfb8944() 
  quartz.dll!7cfa452e() 
  quartz.dll!7cfa44c7() 
  MyClient.exe!CDXGraph::Run()  行264 + 0x14 C++程序在调用Pause前进入CBaseReferenceClock::GetTime两次 没问题  ,调用完Pause后出现的。我将Pause删除问题仍然存在,麻烦大家帮忙看下,程序可能出现此现象问题的地方。还有源Filter在建立Graph时用传数据么,是不是GetMediaType接口定义好类型就可以了;解码器中传入的是什么数据,像分辨率什么的如何设定的,
 

解决方案 »

  1.   

    只有一个原因,你提前释放Filter组件的接口了,导致Filter组件资源自我释放!但要解决还得靠自己慢慢调试
      

  2.   

    还有就是程序没进入到析构里 在析构起始位置出报错  ,有点像越界问题,但是不是,内部调用是directshow的机制,不可能出现此问题,应该是我Filter写的问题,调用机制不对,我刚学,还不太熟悉,麻烦大家帮忙指点下
      

  3.   

    我发现我的graph建立连接时没连上,没判断返回值就继续运行了,我用graphedit可以连接,为什么程序不行,连接的时候用传数据么?谢谢
      

  4.   

    自己写的source filter? pull还是push