我现在建立一个基于对话框的程序,手工连接一些Filter,播放一个mpeg2文件。程序可以正常运行,但是,在debug模式下,程序退出后,系统显示有内存泄漏,请问如何释放这些Filte对象?

解决方案 »

  1.   

    了解一下COM,所有查询的接口指针都要Release。
      

  2.   

          我现在一共使用了6个Filter。然后使用陆其明开发指南138页的代码,删除所有的Filter,这个代码的处理是枚举所有的Filter,然后删除,但是执行这个函数后,仍然有内存泄漏。我统计了一下他枚举的filter数量的确是6个。       请问这是为什么?然后我尝试用他下面的函数NukeDownstream()来代替上面的代码,但是这个函数似乎陷入死循环了。
          
           多谢回复。
      

  3.   

       目前使用的6个Filter中,有一个是我自己改写的Filter,这个Filter是将DShow安装目录\Samples\C++\DirectShow\Filters\Dump的filter改写,实现自己的一个绘图功能。如果把这个
    Filter从程序中去除,则没有内存泄漏。   这说明还是我自己的Filter有问题。我在这个Filter内的析构函数中,释放动态申请的内存(但还是有内存泄漏),那么还需要做什么,才没有内存泄漏?
      

  4.   

        谢谢。好像是与这个有关。有句柄:
         hDC=GetWindowDC(hwnd);
        然后我用DeleteObject(hDC);但是跟踪显示,这个函数执行不成功。请问这个是怎么回事?
     
         另外还有一件奇怪的事情,我的Filter本来用GraphEdit做可执行程序,在filter的析构函数中设断点,本来可以正常中断,但现在进入不到这个断点了,GraphEdit的执行开起来也很正常。真是莫名其妙。     也谢谢其他朋友的回复。
      

  5.   

    GetDC() GetWindowDC() 对应调用ReleaseDC() , 只有Create出来的DC采用DeleteDC
      

  6.   

    deleteobject 删除的是GDI绘图对象句柄。 比如HBITMAP,HICON等, 不能删除DC
      

  7.   

         刚才用ReleaseDC,仍然不成功,GetLastError,返回1425:无效的设备上下文(DC)句柄。这个是怎么回事?
          谢谢回复。