none
Visual Studio에서 개발한 프로그램이 윈도XP에서 잘되는게 윈도7에서는 안됩니다 RRS feed

  • 질문

  • 윈도XP에서 개발하다가 최근에 윈도7으로 업그레이드했는데요,

     

    윈도7에 Visual Studio 2008을 설치하고 개발한 소스(개발언어: Visual C++)를 가져와서 컴파일을 했는데,

    문제가 있어서 질문 올립니다.

     

    wavaout을 이용해서 소리를 재생하는 프로그램인데요,

    윈도7에서 컴파일을 해서 작동해보니

    화면은 나오지만 소리가 나오지를 않습니다.

     

    개발도구도 똑같고, 소스도 똑같고, 컴파일해서 에러도 없고, 단지 운영체제만 다를 뿐인데

    윈도XP에서는 잘되는게 윈도7에서는 왜 작동이 제대로 안되나요?

     

    문제가 뭔지 원인을 어디서부터 찾아야 할지 어떻게 해결해야 할지 막막합니다.

    해결 조언 부탁드립니다.

    2011년 11월 21일 월요일 오전 5:36

모든 응답

  • 안녕하십니까? youn1

    Microsoft MSDN Forum 사이트를 방문해 주셔서 감사합니다.


    고객님께서 문의하신 내용은 트랙킹중에 있습니다. 답답하시겠지만,  조금만 기다려주시면 답변을 작성하겠습니다.

     

    제가 문제에 대해 더 알아야 할 것이 있다면 응답 주시면 감사하겠습니다.

    제시해 드린 답변이 도움이 되었기를 바랍니다.

    2011년 11월 25일 금요일 오전 1:58
    중재자
  • 안녕하십니까? youn1

    Microsoft MSDN Forum 사이트를 방문해 주셔서 감사합니다.

     

    문의 하신 “Visual Studio에서 개발한 프로그램이 윈도XP에서 잘되는게 윈도7에서는 안됩니다”에 대한 답변을 드리겠습니다.

                

    Waveout() API들은 모두 Win7 환경에서도 정상적으로 지원합니다.
     
    XP/7
    환경의 차이점과 관련하여 기존에 보고된 문제는 없습니다. 아마도 특정 API에서 테스트 환경에 따라 fail이 되었으나, 그것을 처리하지 않은 것은 아닌지 의심이 됩니다. waveoutOpen() 또는 관련 API 사용시에 반드시 API들의 반환코드를 꼭 확인해 보시기 바랍니다.

     

    제가 문제에 대해 더 알아야 할 것이 있다면 응답 주시면 감사하겠습니다.

    제시해 드린 답변이 도움이 되었기를 바랍니다.

    2011년 11월 25일 금요일 오전 9:47
    중재자
  • 친절한 답변 감사드립니다~

    개발 초보라 잘 이해가 안가서 추가로 문의합니다.

    API를 작동하기 위해서 윈도7에서 Visual Stduio 2008과 Visual Studio 2008의 서비스팩1를 설치했는데,

    윈도7에 맞게 환경을 설정한다거나 윈도7과 관련된 추가 업데이트 사항은 없나요?

    윈도XP에서 설치하던 그대로 윈도7에서도 정상적으로 지원한다는 뜻인가요?

    그리고 API의 반환코드를 확인해보라는 뜻이 윈도7에서의 호환을 말씀하시는 뜻인지요?


    • 편집됨 youn1 2011년 12월 2일 금요일 오전 6:26
    2011년 12월 2일 금요일 오전 5:42
  • 안녕하십니까? youn1

    Microsoft MSDN Forum 사이트를 방문해 주셔서 감사합니다.

    개발을 하실 때, 특정 OS에서만 사용할 수 있는 기능과 같이, 예외적인 기능을 다루기 위해서 Windows SDK를 별도로 설치하여 사용하는 경우는 있습니다. 따라서 일반적으로 Visual Studio 2008과 같은 개발툴 이외에 Windows SDK를 설치하는 것은 권장되는 일입니다. 그러나 많은 경우에는 개발툴(Visual Studio)을 설치하는 것 만으로도 필요한 대부분의 기능을 개발하실 수 있습니다.

     

    문의하신 waveout api의 경우 윈도우2000이후에 출시된 모든 OS에서 사용이 가능한 API입니다. , XP vista, 또는 7에서 모두 똑같이 사용할 수 있는 API란 뜻입니다.

    waveOutOpen function

    http://msdn.microsoft.com/en-us/library/windows/desktop/dd743866(v=vs.85).aspx

     

    Minimum supported client

    Windows 2000 Professional

    Minimum supported server

    Windows 2000 Server

     

    따라서, OS API의 문제가 아니라 사용방식에 문제가 있을 것으로 추정이 됩니다. 예를 들어, waveoutopen API를 호출하였다면, 그 함수 호출의 성공 실패 여부를 반드시 확인해 보시기 바랍니다. 또는 잘 동작하는 sample을 구하셔서 실행해 보시는 것도 도움이 됩니다. 반환 코드를 확인하란 뜻은,

           if (waveOutOpen(&m_hWaveout, WAVE_MAPPER, &wfex, (DWORD_PTR)&CWave::WaveOut_Proc, (DWORD_PTR)this, CALLBACK_FUNCTION) != MMSYSERR_NOERROR)

           {

                  m_hWaveout = NULL;

                  bResult = FALSE;

           }

     

     

    이처럼, waveoutopen을 호출하고 그 반환값을 확인하란 뜻입니다. API는 만약 성공하였다면 MMSYSERR_NOERROR 값을 반환합니다. 그 이외의 값을 반환하였다면, 호출 시에 문제가 있음을 나타냅니다.

     

    http://www.codeproject.com/KB/audio-video/CWave.aspx

    위 링크에서 내려받으실 수 있는 샘플을 다운로드하고, 컴파일 했을 때 Windows 7 환경에서 정상적으로 wav 파일을 재생할 수 있었습니다. 한번 확인해 보시기 바랍니다.

     

    제가 문제에 대해 더 알아야 할 것이 있다면 응답 주시면 감사하겠습니다.

    제시해 드린 답변이 도움이 되었기를 바랍니다.

    2011년 12월 6일 화요일 오전 7:04
    중재자