1. Aphache Download
http://ftp.daum.net/apache/tomcat//tomcat-6/v6.0.32/bin/apache-tomcat-6.0.32.exe
2. Copy servlet-api.jar
C:\Program Files\Apache Software Foundation\Tomcat 6.0\lib\servlet-api.jar
3. Paste servlet-api.jar
C:\Program Files\Java\jdk1.6.0_24\jre\lib\ext\servlet-api.jar
COM을 사용하는 대부분의 함수들과 마찬기지로 CoInitializeEx() 함수는 HRESULT 값을 리턴한다. HRESULT는 함수의 호출 결과를 나타내는 32비트의 값을 표현하며 함수가 성공적으로 호출된 경우 S_OK를 리턴하는 등의 정보를 제공해준다.
다음의 표는 가장 많이 사용되는 HRESULT 에러 코드이다.
|
에러코드 |
값 |
설명 |
|
E_NOTIMPL |
0x80004001L |
인터페이스의 메서드가 구현되지않음 |
|
E_OUTOFMEMORY |
0x8007000EL |
요청한 메모리를 할당하지 못함 |
|
E_INVALIDARG |
0x80070057L |
인터페이스 메서드에 잘못된 인수가 옴 |
|
E_NOINTERFACE |
0x80004002L |
요청한 인터페이스를 지원하지 않음 |
|
E_ACCESSDENIED |
0x80070005L |
요청한 컴포넌트에 접근 할 수 없음 |
|
S_OK |
0x00000000L |
성공적으로 호출 된 경우 |
|
E_FAIL |
0x80000000L |
함수를 호출하는 중에 에러가 생길 경우 |
함수의 호출 결과를 검사하기 위해 다음과 같이 == 연산자를 사용하여 검사가 가능하다.
|
HRESULT hr; hr = CoInitializeEx(NULL, COINIT_APARTMENTTHREADED); if(hr != S_OK) // 만약 실패했다면 { cout << "초기화 할 수 없습니다!" << endl; return 0; } |
또는 SUCCEEDED와 FAILED 매크로를 사용하여 함수 호출 결과를 검사할 수 있다.
|
#define SUCCEEDED(hr) ((HRESULT(hr)>=0) #define FAILED(hr) ((HRESULT(hr)<0)
|
SUCCEEDED를 사용한 예
|
HRESULT hr; hr = CoInitializeEx(NULL, COINIT_APARTMENTTHREADED); if(!SUCCEEDED(hr)) // 만약 실패했다면 { cout << "초기화 할 수 없습니다!" << endl; return 0; } |
[출처] HRESULT 에러 코드|작성자 KBS
#import 지시어가 생성하는 .TLI 파일의 메서드 구현 코드는 다음 예와 같이 HRESULT 값을 검사하여 실패한 경우에 _com_issue_error 또는 _com_issue_errorex 함수를 호출한다.
|
inline HRESULT IHello::sayHello(unsigned short * name, unsigned short ** message) { HRESULT _hr = raw_sayHello(name, message); if(FAILED(_hr)) _com_issue_errorex(_hr, this, __uuidof(this)); return _hr; } |
l _com_issue_error
단순히 HRESULT 값을 매개변수로 취하여 _com_error 데이터형의 예외를 던짐
l _com_issue_errorex
HRESULT 값과 함께 인터페이스 포인터와 IID를 매개변수로 취하여 해당 인터페이스가 IErrorInfo 인터페이스를 지원하면 IErrorInfo 객체를 구하여 HRESULT와 함께 IErrorInfo 객체 정보를 포함시켜 _com_error 데이터형의 예외를 던짐
예외 처리
_com_ptr_t 스마트 포인터 클래스를 통하여 COM 객체를 사용할 때 발생하는 에러를 처리할 수 있다.
|
try { IHelloPtr pIHello(__uuidof(Hello)); // …. pIHello->sayHello(name, &message); // … } catch (_com_error & e) { cout << e.ErrorMessage << endl; } |
_com_error 예외 타입 클래스 멤버
l ErrorMessage : 에러를 설명하는 const TCHAR * 리턴
l Error : HRESULT 값, 즉 에러 코드값 리턴
l Source : IErrorInfo::GetSource 멤버 함수의 호출 결과(_bstr_t) 즉, 에러 소스 리턴
l Description : IErrorInfo::GetDescription 멤버 함수의 호출 결과(_bstr_t) 리턴
만일 IErrorInfo가 저장되어 있지 않은 경우 빈 _bstr_t를 리턴하며, IErrorInfo 멤버 함수를 호출하는 동안 발생한 실패는 무시된다.
예외의 발생
다음 예제와 같이 _error_issue_error 함수를 사용
|
IHelloPtr { HRESULT hr = p.CreateInstance(__uuidof(Hello)); if(FAILED(hr)) _com_issue_error(hr); } catch (_com_error & e) { cout << e.ErrorMessage() << endl; }
[출처] _com_error 클래스와 HRESULT 에러 처리|작성자 KBS |

org.eclipse.jdt.core_3.6.1.v_A68_R36x.zip
Prev
Rss Feed