C++Builder Programming Forum
C++Builder  |  Delphi  |  FireMonkey  |  C/C++  |  Free Pascal  |  Firebird
볼랜드포럼 BorlandForum
 경고! 게시물 작성자의 사전 허락없는 메일주소 추출행위 절대 금지
C++빌더 포럼
Q & A
FAQ
팁&트릭
강좌/문서
자료실
컴포넌트/라이브러리
메신저 프로젝트
볼랜드포럼 홈
헤드라인 뉴스
IT 뉴스
공지사항
자유게시판
해피 브레이크
공동 프로젝트
구인/구직
회원 장터
건의사항
운영진 게시판
회원 메뉴
북마크
볼랜드포럼 광고 모집

C++빌더 Q&A
C++Builder Programming Q&A
[22346] Re:다시질문 - COM 객체 사용시 에러를...
정진후 [] 1108 읽음    2002-10-30 16:35
이경석 님이 쓰신 글 :
: COM 객체는 try ~ catch 로 잡을수 없는지 궁금합니다.
:
: 예를 들어 ( 너무 코드에 신경 쓰지 마세요. )
:
: --------------------------------------------------------------------------------
: IAbcPtr* pAbc;
:  
: CoCreateInstance(CLSID_Abc, NULL, CLSCTX_INPROC_SERVER, IID_IAbc, (void**)&pAbc);
:   
: try
: {
:   pAbc->Method1(param1);
:   pAbc->Method2(param2);
: }
: catch(Exception& e)
: {
:   ShowMessage("에러발생");
: }
: --------------------------------------------------------------------------------
:
: 위와 같은 방법으로 하면 만약 Method1() 에서 에러가 나면 HRCHECK 라는 타이틀의
: 대화상자가 나타나서 예, 아니오, 취소 버튼중 하나를 누를수 있도록 하게 되거든요.
: utilcls.h에 정의 되어 있더라구요.
:
: 제가 원하는 거는 그런 자체 에러 대화상자 없이 catch 아래의 "에러발생" 이란
: 메세지를 출력 하는 거든요.
:
: 아님 각 메소스마다 
: HRESULT hr = pAbc->Method1(param1)
: 이런식으로 추가 해서 hr의 값으로 처리 해야 하는데...쩝....
:
: 고수님들 어드레 방법이 없나요.
:

안녕하세요 정진후라고 합니다.
물론 잡을 수 있는 방법이 있습니다.
호출하시려는 COM관련 동작들을
OleCheck()안에 감싸면 됩니다.

그렇게 했을 경우에 위의 함수는
COM관련 동작을 평가해서 결과 값이 에러일 경우
EOleSysError 에러를 던집니다. 그럼 그 받은 에러로
적절한 평가와 이후 작업을 하시면 되겠습니다.

간단한 예를 들어보면 (역시 코드에는 신경쓰지 마세요)

try {
    OleCheck(SOME_COMPO->SOME_FUNC());
}
catch(EOleSysError *e)
{
    ShowMessage("["+IntToStr(e->ErrorCode)+ "] " +e->Message);
}

뭐 이러한 형식으로 평가 하시면 되겠는데, 한가지 주의하셔야 할 점은
COM컴퍼넌트를 빌더에서 타입 라이브러리로 불러들이면
원래의 함수 원형과 함께 VB와 같이 쓰기 좋도록 래핑한 함수를
같이 생성하게 됩니다.

위의 수순을 따를때 래핑된 함수를 아래의 예와 같이 그대로 쓰면
OleCheck(retcode = SOME_COMPO->SOMEFUNC());
리턴값이 0일 경우를 제외하고는 무조건 catch블록으로 뛰게 됩니다.
그러니 함수의 원형을 불러서 HRESULT값을 평가하게 하면 되겠습니다.

그럼 도움이 되셨기를 바라며..

+ -

관련 글 리스트
22318 다시질문 - COM 객체 사용시 에러를... 이경석 784 2002/10/29
22346     Re:다시질문 - COM 객체 사용시 에러를... 정진후 1108 2002/10/30
22319     Re:다시질문 - COM 객체 사용시 에러를... @.@ 802 2002/10/29
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.