今日個用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的這個變量。