waveOutWrite() 호출 시 주의사항

그냥 아무렇지도 않게 아래와 같이 코딩을 했는데..

BOOL CWaveManager::PlayBlock(PBYTE pData, DWORD dwLength)
{
    WAVEHDR WaveHdr;
    memset(&WaveHdr, 0, sizeof(WaveHdr));
    WaveHdr.lpData = (LPSTR)pData;
    WaveHdr.dwBufferLength = dwLength;

    if(::waveOutPrepareHeader(m_hWaveOut, &WaveHdr, sizeof(WAVEHDR)) != MMSYSERR_NOERROR)
    {
        return FALSE;
    }

    if(::waveOutWrite(m_hWaveOut, &WaveHdr, sizeof(WAVEHDR)) != MMSYSERR_NOERROR)
    {
        return FALSE;
    }

    return TRUE;
}


자꾸 Access violation이 발생하는 것이었다.
왜일까?
그것도 신기한게 TRACE("")로 debug 문자를 찍으면 정상 작동 한다는거다.

얘가 왜이럴까 약 2시간 정도 씨름을 하다가..

::waveOutWrite()는 비동기 방식인데 WaveHdr는 지역변수여서

였다-_-..
얘가 비동기라는걸 처음에 모르고 짠 상태여서 뭐가 문제인지 한참 헤멨다.

이런.. 정 필요하면 스레드는 내가 만들테니 비동기 방식의 API좀 짜달라고..!!
크리에이티브 커먼즈 라이센스
Creative Commons License

Posted by 장현준

2007/10/29 02:58 2007/10/29 02:58
,
Response
No Trackback , No Comment
RSS :
http://b4you.net/blog/rss/response/145


블로그 이미지

빗소리를 먹는 사람.

- 장현준

Notices

Archives

Authors

  1. 장현준

Recent Trackbacks

  1. 듀얼클러치의 생각 rsvin28's me2DAY 2009

Calendar

«   2012/02   »
      1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29      

Site Stats

Total hits:
158015
Today:
85
Yesterday:
228