-1

根据 Microsoft文档:“您可以在将这个 [pwfx] 结构传递给 waveOutOpen 后立即释放它。”

但是这段代码似乎不同意:

pwfx=new WAVEFORMATEX;
pwfx->wFormatTag=WAVE_FORMAT_PCM;
pwfx->nChannels=2;
pwfx->nSamplesPerSec=SPS;
pwfx->nAvgBytesPerSec=SPS*2;
pwfx->nBlockAlign=2;
pwfx->wBitsPerSample=8;
mmres=waveOutOpen(&ghwo,uDeviceID,pwfx,dwCallback,dwCallbackInstance,fdwOpen);
delete pwfx;

带有代码和调用堆栈的屏幕图片

4

2 回答 2

2

我在您提供的代码中看到的唯一问题是您没有完全初始化结构。您没有初始化cbSizewhich 在这种情况下必须设置为0

鉴于您没有在此结构的末尾分配任何额外数据,因此无需在堆中分配它。

完全有可能问题在于您传递给函数的其他参数。我们看不到他们的任何细节,因此无法发表评论。

于 2018-08-19T06:19:52.103 回答
1

你不需要newdelete任何东西。你可以这样做:

WAVEFORMATEX wfx = { };
wfx.wFormatTag=WAVE_FORMAT_PCM;
...
mmres=waveOutOpen(&ghwo,uDeviceID,&wfx,dwCallback,dwCallbackInstance,fdwOpen);

这些帮助有用?

于 2018-08-19T05:50:20.867 回答