# import의 예외 메커니즘은 Visual C++ 에서 발생시키는 바꾸는 방법

기술 자료 번역 기술 자료 번역
기술 자료: 175784 - 이 문서가 적용되는 제품 보기.
이 문서가 보관되었습니다. "그대로" 제공되었으며, 업데이트가 되지 않을 것입니다.
참고 Microsoft Visual C++ .NET 2002 및 Microsoft Visual C++ .NET 2003 Microsoft .NET Framework에서 제공하는 관리되는 코드 모델과 관리되지 않는 네이티브 Microsoft Windows 코드 모델을 모두 지원합니다. 이 문서에 나와 있는 정보는 관리되지 않는 Visual C++ 코드에만 적용됩니다.Visual C++ 2005 Microsoft .NET Framework에서 제공하는 관리되는 코드 모델과 관리되지 않는 네이티브 Microsoft Windows 코드 모델을 모두 지원합니다.
모두 확대 | 모두 축소

요약

클라이언트 응용 프로그램을 만들 때 # import 사용하여 예외를 개체의 메서드에 대한 래퍼 실패 HRESULT를 발견한 경우 _com_error 예외 클래스를 통해 처리 소개합니다. 이 메커니즘은 사용자 고유의 구현으로 바꿀 유효한 이유가 있을 수 있습니다.

추가 정보

두 가지 방법으로 # import 사용 및 실패한 HRESULTS에 대해 예외를 발생시키는 것이 없을 수 있습니다. 첫 번째 # import 문을 사용하여 raw_interfaces_only 절을 사용할 수 있습니다. 그러나 이것은 일부 # import 제공하는 래퍼 클래스의 장점은 부정합니다.

두 번째 방법은 다음 프로토타입 및 기본 구현이 _com_raise_error에 대한 고유한 구현을 제공하여 것입니다:
void __stdcall _com_raise_error(HRESULT hr, IErrorInfo* perrinfo = 0)
   throw(_com_error);

   void __stdcall
   _com_raise_error(HRESULT hr, IErrorInfo* perrinfo ) throw(_com_error)
   {
       throw _com_error(hr, perrinfo);
   } 
				
이 함수가 선언되었지만 COMDEF.H 파일에서 구현되지 않습니다. 링커가 있는 .OBJ 사용자 지정 구현을 제공할 경우 COMSUPP.LIB에서 가져오는 것이 아니라 사용하는. 방금 이를 쉽게 코드에 의해 대체될 수 있도록 _com_raise_error COMSUPP.LIB 자체 개체가 존재합니다.

아래 # import 프로그램의 예외 발생을 함수 구현은 예입니다.
참고: 현재 우리의 컴파일러 함수의 예외 사양은 무시하고 경고가 발생하는 경우를 보여 줍니다.
경고 C4290: C++ 예외 사양 무시됩니다.
C++ 따라 백서를 함수의 선언 있는 예외 사양이, 정의를 포함하여 모든 선언에 있는 경우에는 동일한 형식 ID 집합을 사용하여 예외 사양이 해당 함수의 가져야 합니다.
void __stdcall
   _com_raise_error(HRESULT hr, IErrorInfo* perrinfo ) throw(_com_error)
       {
           //this message box is for demonstration purpose only
          AfxMessageBox( "_com_raise_error (HRESULT, IErrorInfo*)" );
           //your own error handling code or just an abort
       }
#import "C:\Program Files\Common Files\System\ado\msado15.dll" no_namespace rename("EOF", "adoEOF" )

       _bstr_t     bstrEmpty(L"");
       _ConnectionPtr  Conn1 = NULL;
       Conn1.CreateInstance( __uuidof( Connection ) );
       Conn1->Open( bstrEmpty, bstrEmpty, bstrEmpty,0 ); 
					
이 코드는 올바른 연결 정보를 제공하지 않고 ADO 연결 개체를 열려고 시도합니다. _com_raise_error 대체하여 해당 _com_error를 발생하는 것이 없습니다.

하지만 이 함수는 바꾼 방금 때문에 사용자가 여전히에 대한 예외를 잡아내는 할 수도 있습니다. 아래 코드 조각을 살펴보겠습니다.
#import "C:\Program Files\Common Files\System\ado\msado15.dll" no_namespace rename("EOF", "adoEOF" )
    _ConnectionPtr  Conn1 = NULL;
    // Conn1.CreateInstance( __uuidof( Connection ) );
    Conn1->Open( bstrEmpty, bstrEmpty, bstrEmpty ,0); 
				
Conn1 유효한 개체가 아닙니다. 이 경우 및 이 존재하지 않는 개체에 인터페이스 포인터가 호출되는 _com_raise_erro 결과, NULL입니다. 그러나 오버로드된 연산자-> 있는 컴파일러에서 다음 Win32 예외를 결과 Open() 메서드를 호출하는 할 null 인터페이스 메서드가 반환됩니다. 이 예외는 NULL Open() 호출하기 전에 먼저 테스트 Conn1 막을 수 있습니다.

속성

기술 자료: 175784 - 마지막 검토: 2014년 3월 1일 토요일 - 수정: 5.0
본 문서의 정보는 다음의 제품에 적용됩니다.
  • Microsoft Visual C++ 2005 Express Edition
  • Microsoft Visual C++ .NET 2003 Standard Edition
  • Microsoft Visual C++ .NET 2002 Standard 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++ 5.0 Enterprise Edition
  • Microsoft Visual C++ 5.0 Professional Edition
키워드:?
kbnosurvey kbarchive kbmt kbhowto kbdatabase kbinfo KB175784 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