DirectSoundCreate如何释放句柄?

时间:2013-12-25 02:36:16

标签: c++ windows

当我调用“DirectSoundCreate”函数来获取“IDirectSound”指针时,但是在析构函数退出进程时我无法释放它。 像这样:

IDirectSound*       m_pDirectSound;
IDirectSoundBuffer* m_pDsSoundBuffer;
HRESULT hResult = DirectSoundCreate(NULL, &m_pDirectSound,NULL ); 
hResult = 
   m_pDirectSound->SetCooperativeLevel
                      (hWnd,DSSCL_NORMAL|DSSCL_EXCLUSIVE|DSSCL_PRIORITY);

此处发布:

if(m_pDirectSound)
{
   m_pDirectSound->Release();
}

程序将永远阻止在这里!

所以任何人都可以帮助我?我应该释放指针m_pDirectSound吗?非常感谢!

2 个答案:

答案 0 :(得分:2)

有时内存泄漏可能会导致这种情况。 你应该检查你的程序是否有任何内存问题。

您的代码不安全。

IDirectSound*       m_pDirectSound = NULL;
IDirectSoundBuffer* m_pDsSoundBuffer = NULL;
HRESULT hResult = DirectSoundCreate(NULL, &m_pDirectSound,NULL ); 
hResult = 
   m_pDirectSound->SetCooperativeLevel
                      (hWnd,DSSCL_NORMAL|DSSCL_EXCLUSIVE|DSSCL_PRIORITY);
if(FAILED(hResult)) return ;
//if not at the constructor you should type 'return hResult'

您可以访问此网站并下载示例。 http://www.rastertek.com/dx11tut14.html

我从中学习dx11。

:)

答案 1 :(得分:1)

确保您没有过早致电CoUninitialize()。如果在卸载COM时仍有COM对象处于活动状态,则之后调用Release()可能会出现各种未定义的行为,包括崩溃和死锁。