FIX: MDI MFC SDI 응용 프로그램에서 Appui1.cpp 선 215 Assert

기술 자료 번역 기술 자료 번역
기술 자료: 193102 - 이 문서가 적용되는 제품 보기.
이 문서가 보관되었습니다. "그대로" 제공되었으며, 업데이트가 되지 않을 것입니다.
모두 확대 | 모두 축소

이 페이지에서

현상

명시적으로 상위 위치를 프레임 창은 명령 처리기가 모달 창으로 표시하기 전에 소멸될 MDI MFC SDI 응용 프로그램의 명령 처리기에서 지정하지 않고 모달 창으로 표시하려고 하면 CCmdTarget::GetRoutingFrame_()에 어설션 메시지가 나타날 수 있습니다 (Appui1.cpp 줄: 215) 디버그 함께 빌드합니다.

응용 프로그램의 릴리스 빌드를 비슷한 모덜리스 창을 모달 창은 동작할 수 있습니다. Visual C++ 사용 MFC DLL 버전이 모두 MFC42.dll 라는 이름의 Visual C++ 6.0 Visual C++ 5.0에서 MFC 응용 프로그램을 업데이트하면 또한 대/소문자를 수 있습니다.

원인

모달 창은 이제 라우팅 프레임 데이터 멤버 (m_pRoutingFrame) 의 스레드 상태를 GetSafeOwner() 소유자 따라 결정할 수 있습니다. 문제가 있는 CFrameWnd 스레드 상태를 현재 라우팅 프레임 삭제되지만 사실을 반영하도록 스레드 상태를 업데이트할 때 설정할 수 있습니다.

해결 방법

스레드 상태를 현재 라우팅 프레임 소멸됨을 CFrameWnd 파생된 클래스의 소멸자를 NULL로 설정하십시오.

CMyFrameWnd::~CMyFrameWnd()
   {

      if( AfxGetThreadState()->m_pRoutingFrame == this )
      {
         AfxGetThreadState()->m_pRoutingFrame = NULL;
      }
   }
				

현재 상태

Microsoft는 이 문서의 시작 부분에 나열한 제품에서 버그가 수 있도록 이 확인했습니다. 이 버그가 있는 Visual Studio 6.0 서비스 팩 1에서 수정되었습니다.

이 서비스 팩을 구하는 데 참조하십시오.
http://msdn2.microsoft.com/en-us/vstudio/Aa718362.aspx

추가 정보

이 문제의 영향을 받는 MFC 프레임 창 유형을 CFrameWnd, CMDIFrameWnd, CMDIChildWnd, COleIPFrameWnd 수 있습니다.

영향을 받는 MFC 모달 창은 다음과 같습니다.
  • 대화
  • CPropertySheet
  • OLE 속성 시트 [[ASCII 150] 통해 호출된 OleObject::DoVerb(OLEIVERB_PROPERTIES)]
  • COleBusyDialog
  • [AfxMessageBox() 통해 호출된] 메시지 상자
  • [MAPISendMail() 호출하면] MAPI 모달 창
  • [SQLDriverConnect() 호출하면] SQL 드라이버 연결 대화 상자

문제를 재현하기 위한 단계

  1. 응용 프로그램 마법사에서를 MDI 기반 응용 프로그램이 MFC exe 생성할 수 있습니다.
  2. 클래스를 OnCloseDocument에 의해 응용 프로그램 마법사에서 생성된 CDocument 클래스의 재정의할 수 있습니다.
  3. OnCloseDocument 멤버 함수를 다음과 같이 편집:
          void CMyDoc::OnCloseDocument()
          {
             CDocument::OnCloseDocument();
             AfxMessageBox("The Document is Closed");
          }
    					
  4. 빌드 및 응용 프로그램을 실행하십시오.
  5. 파일 메뉴에서 닫기를 클릭하십시오.
결과를: 다음 오류 메시지가 나타납니다.
"디버그 어설션 오류! 파일: Appui1.cpp 줄: 215 ".
위에서 설명한 경우 이 문제를 해결하려면 소멸자가 있는 CChildFrame에 대한 다음 코드를 추가하십시오.

CChildFrame::~CChildFrame()
   {

      if( AfxGetThreadState()->m_pRoutingFrame == this )
      {
         AfxGetThreadState()->m_pRoutingFrame = NULL;
      }
   }
				


(c) Microsoft의 1998, 예약 모든 권한. Bret Bentzinger, Microsoft에 의해 기고물

참조

Visual Studio 서비스 팩에 대한 자세한 내용은 Microsoft 기술 자료의 다음 문서를 참조하십시오.
194022Visual Studio 6.0 서비스 팩, 어떤, 위치, 이유
194295Visual Studio 서비스 팩이 설치되었는지 확인하는 방법
193009정보: Visual Studio 6.0 서비스 팩 1 추가 정보

속성

기술 자료: 193102 - 마지막 검토: 2014년 2월 22일 토요일 - 수정: 4.2
본 문서의 정보는 다음의 제품에 적용됩니다.
  • Microsoft Foundation Class Library 4.2?을(를) 다음과 함께 사용했을 때
    • Microsoft Visual C++ 6.0 Enterprise Edition
    • Microsoft Visual C++ 6.0 Professional Edition
    • Microsoft Visual C++, 32-bit Learning Edition 6.0
키워드:?
kbnosurvey kbarchive kbmt kbqfe kbbug kbdocview kbfix kbvc600sp1fix kbvs600sp1fix kbvs600sp2fix KB193102 KbMtko
기계 번역된 문서
중요: 본 문서는 전문 번역가가 번역한 것이 아니라 Microsoft 기계 번역 소프트웨어로 번역한 것입니다. Microsoft는 번역가가 번역한 문서 및 기계 번역된 문서를 모두 제공하므로 Microsoft 기술 자료에 있는 모든 문서를 한글로 접할 수 있습니다. 그러나 기계 번역 문서가 항상 완벽한 것은 아닙니다. 따라서 기계 번역 문서에는 마치 외국인이 한국어로 말할 때 실수를 하는 것처럼 어휘, 구문 또는 문법에 오류가 있을 수 있습니다. Microsoft는 내용상의 오역 또는 Microsoft 고객이 이러한 오역을 사용함으로써 발생하는 부 정확성, 오류 또는 손해에 대해 책임을 지지 않습니다. Microsoft는 이러한 문제를 해결하기 위해 기계 번역 소프트웨어를 자주 업데이트하고 있습니다.

피드백 보내기

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com