[원문] http://support.microsoft.com/kb/158552/en-us/
          http://support.microsoft.com/kb/158552/ko

CPropertySheet::DoModal() 또는 CPropertySheet::Create() 호출하면 예외가 발생할 수 있습니다.
현상
CPropertySheet::DoModal()
또는 CPropertySheet::Create() 호출하면 예외가 발생할 수 있습니다.
출력 창에 다음 메시지가 표시됩니다.
<program.exe> (Comctl32.dll) 에서 첫 번째 예외가: 0xC0000005: 액세스 위반.
예상되는 예외와 운영 체제에 의해 처리됩니다. 이 경우에만 이러한 방법 중 하나를 호출하면 처음 발생하여 호출에서는 이 첫 번째 예외가 생성되지 않습니다.

원인
CommCtl32.dll 해당 페이지에 대한 리소스를 수정하는 시도합니다. 읽기 전용 섹션에 리소스가 일반적으로 때문에 운영 체제에서 발견되었습니다 첫 번째 기회가 예외를 throw합니다. 운영 체제에서 이 예외를 처리하는 및 리소스를 쓸 수 있도록 모든 다음 정상적으로 완료됩니다. 이 첫 번째 예외가 않고 모든 후속 호출을 완료하려면 리소스를 쓰기 이제 때문에

해결방법
첫 번째 예외가 안전하게 운영 체제에 의해 처리되기 때문에 무시해도 됩니다.

예외를 방지하려면 다음 방법 중 하나를 사용하십시오.
  • 방법 1 : 읽기/쓰기 리소스를 만들기. 다음과 같이 설정을 링커 추가하여 이렇게 할 수 있습니다:
    /SECTION:.rsrc,rw
  • 방법 2 : MS Sans 않습니다 페이지의 글꼴 변경. MFC는 페이지의 대화 템플릿 글꼴을 확인합니다. MS Sans 않으면 MFC 읽기/쓰기 메모리 리소스 복사본을 만들어 및 다음 글꼴을 수정하고 C mCtl32.dll 전달합니다. DLL 페이지 서식 파일에 쓸 때 메모리 읽기 쓰기 기록합니다. Therfore, 예외가 throw될 수 없습니다.
  • 방법 3 : try/catch(...) 블록을 속성 시트를 만드는 호출이 없는 함. 대신, catch 블록에 특정 예외 catch 합니다.
속성 시트를 서버의 OLE 자동화 서버의 메서드를 통해 호출한 일부이면, 읽기/쓰기 OLE 예외를 catch 때문에 처음 두 방법 중 하나를 사용하여 리소스를 확인하십시오.

참고 읽기/쓰기 리소스를 변경할 때 리소스는 페이지 파일에 쓸 수 있습니다.

현재상태
이 동작은 의도적으로입니다.

예제
   /* Compile options needed: default
   */

   /***** this code will cause unpredictable results *****/
   try
   {
       sheet.DoModal();
   }
   catch(...)
   {
   }

   /***** this code is OK *****/
   try
   {
       if (0 == sheet.DoModal())
           throw "DoModal() failed!";
   }
   catch(char * str)
   {
       TRACE ("Exception thrown: %s\n", str);
   }
 
참조
자세한, Microsoft 기술 자료에 있는 문서를 보려면 다음 문서 번호를 클릭하십시오.
126630  (http://support.microsoft.com/kb/126630/ ) 읽기 전용 리소스 섹션이 있습니다.


본 문서의 정보는 다음의 제품에 적용됩니다.
  • Microsoft Foundation Class Library 4.2 을(를) 다음과 함께 사용했을 때
    • Microsoft Visual C++ 4.0 Standard Edition
    • Microsoft Visual C++ 4.1 Subscription
    • Microsoft Visual C++ 4.2 Enterprise Edition
    • Microsoft Visual C++ 4.2 Professional Edition
    • Microsoft Visual C++ 5.0 Enterprise Edition
    • Microsoft Visual C++ 5.0 Professional Edition
    • Microsoft Visual C++ 6.0 Enterprise Edition
    • Microsoft Visual C++ 6.0 Professional Edition
    • Microsoft Visual C++, 32-bit Learning Edition 6.0
    • Microsoft Visual C++ .NET 2002 Standard Edition
    • Microsoft Visual C++ .NET 2003 Standard Edition

+ Recent posts