none
Visual Studio 2015 MFC afxwin2.inl Error!! RRS feed

  • 질문

  • 안녕하세요.

    한국 개발자입니다.

    Visual Studio 2013 까지만 해도 전혀 문제 없었는데,

    Visual Studio 2015 부터 갑자기 MFC void CWnd GetWindowRect 에서 afxwin2.inl 오류가 발생했습니다.

    따라서 Invalidate, updateWindow 등도 연달아 오류가 발생하더라구요.

    또한  인코딩 문제가 갑자기 발생하더라구요.. 한글로 된 버튼이 깨진 문자가 나온다든가...

    유니코드로 소스를 저장해서 어찌어찌 해결해나가고있는데,

    이 오류는 참 ... 어찌 해결해야 할지..ㅠ

    고수님들, 마이크로 소프트 관계자분들 부디 해결법을 알려주셨으면 합니다...

    그럼 잘 부탁 드립니다.

    감사합니다.

    2015년 9월 24일 목요일 오전 12:37

답변

  • 원인 분석 완료했고, 수정 완료했습니다.

    내용은 아래와 같습니다.

    우선 2015 버젼부터 아래 코드가 쓰레드 분할이 되지 않는듯 합니다.

    //
    // std::async(std::launch::async, [=]()
    // {
    // Sleep(100);
    // theApp.exeMessage();
    // });

    OnInitDialog 후에 다른 프로그램과 메시지를 주고받아야 하는데, 완전히 띄운 후 메시지를 주고 받기 위해 쓰레드를 나누어 위와같이 처리하였으나, 위험요소가 있는 코딩이었습니다.

    하여 위 코드를 아래 코드로 대체하였습니다.

    ShowWindow(SW_SHOW);
    RedrawWindow();
    theApp.exeMessage();

    이렇게 하면 쓰레드 분할하지 않아도 다이얼로그를 완전히 띄운 후 다른 프로그램과 메시지 통신이 가능해 지더군요.

    afxwin 원인은 다이얼로그가 완전하게 띄우지 않은 상태에서 관련 기능을 사용하려 하니 오류가 난 것이었습니다.

    관심 가져 주셔서 감사합니다.

    • 답변으로 표시됨 SMPark82 2015년 9월 24일 목요일 오전 2:44
    2015년 9월 24일 목요일 오전 2:21

모든 응답

  • 어떤 오류가 발생하는지요? 자세한 오류 메시지가 있다면 도움이 될 것입니다. 아니면 한글이 깨지는 문제를 오류 발생했다고 표현하신 것인지요?
    VS 2015 에서 GetWindowRect를 포함한 프로젝트를 만들어서 오류가 재현되는지요?
    문의하신 내용을 미루어 짐작해보면,
    VS 2013에서 GetWindowRect를 포함한 프로젝트를 만들고, VS 2015에서 빌드해서 실행하면 오류가 발생하는 것으로 보입니다만.

    "MSDN 포럼"은 개발자들을 위한 커뮤니티 공간으로 질문과 답변, 팁 & 노하우, 기술 정보, 기타 유용한 정보를 서로 묻고 답하는 공간입니다.

    특히 선경험자들이 이미 겪은 경험을 공유하기 위해서는, 질문의 내용에 가급적 자세한 정보를 기술해 주셔야 합니다.
    자세한 정보란 사용중인 운영체제에 대한 버전 번호, 32비트/64비트, 언어 정보등이 포함된 자세한 기술, 문제가 발생 제품의 버전 번호, 32비트/64비트, 언어 정보등이 포함된 자세한 기술, 문재 재현 코드, 로그가 있었다면 자세한 로그 내용, 오류 메시지가 있었다면 자세한 오류메시지등을 자세히 기술하여야 빠르고 정확한 답변을 받으실 수 있습니다.

    2015년 9월 24일 목요일 오전 2:04
  • 원인 분석 완료했고, 수정 완료했습니다.

    내용은 아래와 같습니다.

    우선 2015 버젼부터 아래 코드가 쓰레드 분할이 되지 않는듯 합니다.

    //
    // std::async(std::launch::async, [=]()
    // {
    // Sleep(100);
    // theApp.exeMessage();
    // });

    OnInitDialog 후에 다른 프로그램과 메시지를 주고받아야 하는데, 완전히 띄운 후 메시지를 주고 받기 위해 쓰레드를 나누어 위와같이 처리하였으나, 위험요소가 있는 코딩이었습니다.

    하여 위 코드를 아래 코드로 대체하였습니다.

    ShowWindow(SW_SHOW);
    RedrawWindow();
    theApp.exeMessage();

    이렇게 하면 쓰레드 분할하지 않아도 다이얼로그를 완전히 띄운 후 다른 프로그램과 메시지 통신이 가능해 지더군요.

    afxwin 원인은 다이얼로그가 완전하게 띄우지 않은 상태에서 관련 기능을 사용하려 하니 오류가 난 것이었습니다.

    관심 가져 주셔서 감사합니다.

    • 답변으로 표시됨 SMPark82 2015년 9월 24일 목요일 오전 2:44
    2015년 9월 24일 목요일 오전 2:21
  • MSDN 포럼에 경험을 공유하여 주셔서 감사드립니다.
    2015년 9월 24일 목요일 오전 2:45