使用waveOutPrepareHeader函數時特別注意,參數LPWAVEHDR pwh不能用保存在棧變量

今日個用waveOut系列函數播放wav文件時,發現老接收不到MM_WOM_DONE消息。調試了好久,發現是我在調用waveOutPrepareHeader函數時第二個參數LPWAVEHDR pwh用的是棧中的自動變量。函數運行完後pwh結構也沒了,所以就再也收不到MM_WOM_DONE消息了。改爲new一個WAVEHDR結構變量後,終於能收到MM_WOM_DONE消息了。原因是因爲這個參數時一個in-out參數,在MM_WOM_DONE消息的處理函數中會返回給你的,到時候再釋放也不遲。

 

MSDN上waveOutPrepareHeader函數的remark應該加入一點:pwh參數不能用自動變量,取非你不想處理MM_WOM_DONE消息。

一般是在waveOutPrepareHeader函數前new一個WAVEHDR結構體變量,然後在waveOutUnprepareHeader函數中處理你new的這個變量。

發佈了134 篇原創文章 · 獲贊 243 · 訪問量 54萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章