현재 오프라인 상태입니다. 인터넷에 다시 연결하기를 기다리고 있습니다.

# import의 예외 메커니즘에 대해 ADO (ActiveX 데이터 개체 () Visual C++ 에서 발생시키는 바꾸는 방법

중요: 본 문서는 전문 번역가가 번역한 것이 아니라 Microsoft 기계 번역 소프트웨어로 번역한 것입니다. Microsoft는 번역가가 번역한 문서 및 기계 번역된 문서를 모두 제공하므로 Microsoft 기술 자료에 있는 모든 문서를 한글로 접할 수 있습니다. 그러나 기계 번역 문서가 항상 완벽한 것은 아닙니다. 따라서 기계 번역 문서에는 마치 외국인이 한국어로 말할 때 실수를 하는 것처럼 어휘, 구문 또는 문법에 오류가 있을 수 있습니다. Microsoft는 내용상의 오역 또는 Microsoft 고객이 이러한 오역을 사용함으로써 발생하는 부 정확성, 오류 또는 손해에 대해 책임을 지지 않습니다. Microsoft는 이러한 문제를 해결하기 위해 기계 번역 소프트웨어를 자주 업데이트하고 있습니다.

177425
이 문서가 보관되었습니다. "그대로" 제공되었으며, 업데이트가 되지 않을 것입니다.
참고 Microsoft Visual C++ .NET 2002 및 Microsoft Visual C++ .NET 2003 Microsoft .NET Framework에서 제공하는 관리되는 코드 모델과 관리되지 않는 네이티브 Microsoft Windows 코드 모델을 모두 지원합니다. 이 문서에 나와 있는 정보는 관리되지 않는 Visual C++ 코드에만 적용됩니다.Microsoft Visual C++ .NET 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 = 0) throw(_com_error)   {       throw _com_error(hr, perrinfo);   }				
이 함수가 선언되었지만 Comdef.h 파일에서 구현되지 않습니다. 링커는 .OBJ 파일에 사용자 지정 구현을 제공할 경우 Comsupp.lib 파일에서 가져오는 해당 구현을 사용합니다. _com_raise_error는 Comsupp.lib 파일의 자체 개체가 존재하므로 코드에서 쉽게 바꿀 수 있습니다.

함수를 발생시키는 경우 # import 예외 샘플 구현은 다음과가 같습니다.

참고: 현재 컴파일러는 함수의 예외 사양은 무시하고 다음 경고가 발생하는 경우를 보여 줍니다.

경고 C4290: C++ 예외 사양 무시됩니다.
이 시간에 예외 사양이 구현 세부 있어야 표준화되어 있지 및 받아들일 있지만 Microsoft Visual C++에서 구현되지 않습니다. 무시되는 예외 사양이 컴파일된 코드를 컴파일하고 예외 사양을 지원하는 이후 버전에서 다시 연결된 할 수 있습니다. 경고 pragma 사용하여 이 경고를 방지할 수 있습니다.

#pragma warning( disable : 4290 ) 				

예제 코드

   void __stdcall   _com_raise_error(HRESULT hr, IErrorInfo* perrinfo = 0) 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 <msado15.dll>        ...     _bstr_t     bstrEmpty(L"");     _ConnectionPtr  Conn1 = NULL;     Conn1.CreateInstance( __uuidof( Connection ) );     Conn1->Open( bstrEmpty, bstrEmpty, bstrEmpty );				
이 코드는 올바른 연결 정보를 제공하지 않고 ADO (ActiveX 데이터 개체) 연결 개체를 열려고 시도합니다. _com_raise_error 바꾸는 경우 _com_error를 발생하는 것이 없습니다.

경고: 이 문서는 자동으로 번역되었습니다.

속성

문서 ID: 177425 - 마지막 검토: 02/22/2014 06:55:09 - 수정: 4.0

Microsoft Visual C++ 5.0 Enterprise Edition, Microsoft Visual C++ 6.0 Enterprise Edition, Microsoft Visual C++ 5.0 Professional Edition, Microsoft Visual C++ 6.0 Professional Edition, Microsoft Visual C++, 32-bit Learning Edition 6.0, Microsoft Visual C++ 2005 Express Edition, Microsoft Visual C++ .NET 2003 Standard Edition, Microsoft Visual C++ .NET 2002 Standard Edition

  • kbnosurvey kbarchive kbmt kbhowto kbcompiler kbdatabase kbinfo kbmdacnosweep KB177425 KbMtko
피드백