블로그는 귀차니즘

First Sensation
  • 공지
  • 지역로그
  • 태그
  • 방명록

ATL Inherit Implement - ATL으로 COM 라이브러리 작성시 상속 구현하는 방법

Programming Tip 2008/02/22 02:09 귀차니스트
  COM 이라는 것은 Component Object Model의 준말입니다. Windows의 기반 기술이기도 하죠. 이 COM 이라는 것은 흔히 말하는 Language Independent 속성을 가지고 있습니다. 즉, 어떠한 언어라도 COM규약만 지킨다면 작성할 수 있고, 호출또한 가능하다는 얘기가 되죠.
 그럼 C++ 에서는 COM을 어떻게 작성하면 될까요? MFC ActiveX 로 개발할 수 도 있고, IUnknown 인터페이스를 지켜 개발할 수도 있지만 가장 좋은 방법은 ATL 이라는 COM 작성을 위한 아주 심플하고 속도가 빠른 라이브러리를 사용하는 것입니다. 이 Active Template Library를 사용하여 COM 라이브러리를 개발할 경우 Class 들의 집합으로 프로그램이 개발되는데, 이 Class들 또한 OOP의 개념답게 상속의 개념을 구현할 수 있습니다. 어떻게 하냐구요?? 한 번 따라해보시겠습니까??

  1. 일단 ATL 프로젝트를 생성합니다. 이름은 어떻게 적어도 상관없습니다.

  2. 프로젝트가 생성되었다면 클래스 뷰를 엽니다.


  3. 클래스 뷰를 보게 되면 아래의 그림과 같은 Class 들이 존재하는 것을 확인할 수 있습니다. 개중 중요한 것은 PS가 붙은 클래스가 아닌 프로젝트 명과 동일한 클래스죠.


  4. 이 클래스에서 마우스 오른쪽을 눌러봅시다. 그럼 Add 메뉴가 보이실겁니다. 우리가 구현할 것은 OOP의 개념 중의 하나인 상속입니다. 그럼 Class를 2개 만들어야 겠죠?


  5. 보시다시피 CBase 클래스와 CInherit 클래스를 생성하였습니다. 클래스 생성시 C문자가 자동으로 붙었습니다. 그리고 보시면 ICBase, ICInherit 라는 것도 보이는군요. COM 모델에서 I가 붙은 것은 매우 중요합니다. 눈치 빠른 분들은 아시겠지만 바로 인터페이스 입니다. 밖에서 현재의 라이브러리로 접근하기 위한 인터페이스죠.

  6. ICBase 와 ICInherit 클래스에 ShowMessage 함수를 각각 생성 해보도록 하겠습니다. 설명보다는 그림이 훨씬 간단할거 같군요.

  7. 위 그림에서 보이는 메뉴를 선택하여 ShowMessage 라는 메소드를 각 인터페이스에 생성하였습니다. in, out, retval 이라는 체크 부분도 보이지만 지금은 그냥 넘어가도록 하겠습니다. 중요한 것은 상속이지 저런게 아니니까요^^ 일단 생성 코드를 보시면 다음과 같이 추가한 메소드에 대한 코드가 존재합니다.

  8. 그럼 여기서 ShowMessage 함수를 간단하게 구현해야 하겠죠? 저는 CBase 클래스에는 CBase 라는문자를 CInherit 클래스에는 CInherit 라는 문자를 메시지박스로 띄우는 코드를 넣겠습니다.



  9. 이제 끝이냐? 하면 그렇지는 않습니다. COM 이라는 것과 CORBA 라는 것은 IDL 이라는 언어로 인터페이스가 정의된다고 합니다. 그래서 이 부분 또한 고쳐주어야 하죠. 일단 제 경우는 테스트 프로젝트가 InheritTest 이므로 InheritTest.idl 파일을 열어보겠습니다.

  10. 클래스 정의가 간단하게 보이는 군요. 뭐 워낙 기존 형식언어들과 비슷하기 때문에 큰 어려움은 없을 것으로 생각이 듭니다. 해당 idl 파일에서 ICInherit 부분을 ICBase 가 상속을 받도록 합니다. 그리고 상속을 받기 때문에 함수 충돌이 일어나지 않게 메소드를 지워줍니다. 그리고 CInherit coclass 가 ICBase 를 인터페이스로 가질 수 있도록 설정합니다.

  11. 그럼 이제 CInherit.h 파일을 보면 COM_INTERFACE_ENTRY 라는 부분이 있는데 이 또한 ICBase 인터페이스가 접근할 수 있도록 수정하여 줍니다.

  12. 그런 다음 컴파일을 합니다. 에러가 발생하지 않네요..
  13. 그런 다음 C#에서 다음과 같이 코드를 작성하고 실행하여 봅니다.
    C# (Language : csharp)
    1. InheritTestLib.CBase Abc = (InheritTestLib.CBase)(new InheritTestLib.CInheritClass());
    2. Abc.ShowMessage();

    CBase 문자열이 뜨지 않고 CInherit라는 문자열이 뜨는 것을 확인 하실 수 있으실 겁니다. 미심쩍거나 잘못된 부분이 있으면 ATL을 배워가는 도중이라 댓글 부탁드려요.
크리에이티브 커먼즈 라이센스
Creative Commons License
이 저작물은 크리에이티브 커먼즈 코리아 저작자표시-비영리-동일조건변경허락 2.0 대한민국 라이센스에 따라 이용하실 수 있습니다.

"Programming Tip" 분류의 다른 글

OpenMP 라고 아십니까?? (0)2008/07/27
심심해서 구현해본 그래픽 요소 (0)2008/07/03
Child Window Mouse Message 문제. (0)2008/07/01
버퍼 오버플로우, 오버런이란?? (0)2008/04/27
GDI+ 사용 시 Smart Pointer 란?? (0)2008/04/12
2008/02/22 02:09 2008/02/22 02:09
TAG ATL, Inheritance, Library, 상속
받은 트랙백이 없고, 댓글이 없습니다.

트랙백 주소 :: http://www.filewiki.net/tc/trackback/14

댓글을 달아 주세요

◀ 이전페이지 1 ... 94 95 96 97 98 99 100 101 102 ... 110 다음페이지 ▶

블로그 이미지
First Sensation 귀차니스트
rss
  • 관리자
  • 글쓰기

카테고리

  • 전체 (110)
    • Computer (3)
    • Language (14)
    • Reverse Engineering (1)
    • Algorithm (9)
    • TopCoder (3)
    • Library (2)
    • Programming (19)
    • Programming Tip (9)
    • PSP-Programming (10)
    • Program (5)
    • Small Talk (31)
    • Document (4)

최근에 올라온 글

  • Gradient 작성중에 있습.... (3)
  • 게임&인터랙티브 애플리....
  • 한게임 자동테트리스 Ve.... (24)
  • Intel 64 And IA32 Arch.... (2)
  • 한게임 자동테트리스 Ve.... (24)

최근에 달린 댓글

  • 다운어덯게 받아요. difl 2008
  • 멋있네요 ㅎㅎ. 준호씨 2008
  • ^^; 그러셨군요.. 사실 동영.... 귀차니스트 2008
  • ㅋㅋ 속도 튜닝의 무서움 ㅜ.... 귀차니스트 2008
  • 관리자만 볼 수 있는 댓글입.... 비밀방문자 2008

달력

«   2009/01   »
일 월 화 수 목 금 토
        1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31

링크

  • kkamagui 프로그래밍 세상.
  • 류광의 번역 이야기.
  • 서광열의 프로그래밍 언....
  • 준호씨의 블로그.
  • 최익필의 이름없는 블로그.
  • 위키는 귀차니즘.

최근에 받은 트랙백

  • 궁극의 예외처리. 이름없는 블로그 2008
  • Maximum sum. 티스토리 지점 2008

글 보관함

  • 2008/12 (1)
  • 2008/11 (4)
  • 2008/10 (2)
  • 2008/09 (3)
  • 2008/08 (5)

태그목록

  • Linefeed
  • 십자매
  • Contest
  • ACM-ICPC
  • 디자인패턴
  • Application.Run
  • Hilight
  • 라이브러리
  • Generics
  • 압축
  • 파일입출력
  • Ribbon UI
  • 관악기
  • ATL
  • 프로그래밍
  • Assassin's Creed
  • 상속
  • As 형 변환
  • 테트리스
  • RF959
  • 난수
  • RLE8
  • SSD
  • 수학
  • 팡야
  • Dialog
  • Event
  • 디코딩
  • istreambuf_iterator
  • 디인터레이스

지역로그 : 태그 : 방명록 : 관리자 : 글쓰기
귀차니스트’s Blog is powered by Textcube 1.7.5 : Risoluto / Designed by DesignNia.net