Освобождение pwfx после бросков waveOutOpen
Согласно документации 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;
2 ответа
Единственная проблема, которую я вижу в предоставленном вами коде, заключается в том, что вы не полностью инициализировали структуру. Вы не инициализировали cbSize
который в этом случае должен быть установлен в 0
,
Учитывая, что вы не выделяете никаких дополнительных данных в конце этой структуры, нет необходимости размещать их в куче.
Вполне вероятно, что проблема заключается в других параметрах, которые вы передаете в функцию. Мы не можем видеть их детали и поэтому не можем комментировать.
Вам не нужно new
или же delete
что-нибудь. Вы можете просто сделать:
WAVEFORMATEX wfx = { };
wfx.wFormatTag=WAVE_FORMAT_PCM;
...
mmres=waveOutOpen(&ghwo,uDeviceID,&wfx,dwCallback,dwCallbackInstance,fdwOpen);
Это помогает вообще?