我正在使用 Windows API 来获取
IAudioEndpointVolume
的句柄并注册 IAudioEndpointVolumeCallback
。我还有一个 IMMDeviceEnumerator
,其中包含 IMMNotificationClient
的注册回调,这样当默认设备更改时,我会释放 IAudioEndpointVolumeCallback
和 IAudioEndpointVolume
并存储新的。
但是,当释放
IAudioEndpointVolume
时,我的程序似乎在回调线程上无声地崩溃,没有任何异常或我可以看到的输出。即使在中断线路并尝试跳过时,它也会默默地继续,不会到达下一条语句,而且调试器也不会关闭。
if(_volumeEndPoint)
{
if(_callback)
{
HRESULT hrUnReg = _volumeEndPoint->UnregisterControlChangeNotify(this);
if(hrUnReg != S_OK)
{
std::cout << hrUnReg; // this reports successful
}
}
_volumeEndPoint->Release(); // <--- cannot step over this line
_volumeEndPoint = nullptr;
}
if(deviceEndPoint == nullptr)
{
return;
}
我尝试过的事情:
感觉这可能与不同线程上的回调有关?我不太精通 C++、WinAPI 和 COM 东西,所以几乎可以肯定我在做一些愚蠢的事情,但如果它能告诉我某种错误,那就太好了。