티스토리 툴바



2011/06/09 11:50

Eclipse Helios 레퍼런스 목록 멈춤 현상완화 플러그인


이클립스가 설치된 폴더에 plugin 폴더에 덮어써주면 어느정도 완화된다고 한다.

저작자 표시
Trackback 0 Comment 0
2011/03/22 10:25

Apache Setup

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

Trackback 0 Comment 0
2011/01/25 18:11

HRESULT 에러처리

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

Trackback 0 Comment 0
2011/01/25 18:07

_com_error 클래스

#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;

}

Trackback 0 Comment 1