창조유저그룹-커즈닷컴
Window close
ID :     PASS :   
   
  처음으로
  창조
  창조 소개
창조 다운로드
CUGz.com 소개
온라인 도움말
  커뮤니티
  가입인사
자유게시판
Q/A게시판
TIP/TECH
열린강좌
자주하는질문
아이디어게시판
  자료실
  소스자료실
프로그램자료실
기타자료실
명예의 전당
이미지 자료실
  지원/기타
  표준용어재정
구글 웹서치  
관리자 전용


LIST ALL
Posted by 지상현2007-08-07 15:06:09, Hit : 8231
창조와 ActiveX (1)
Homepage : http://ssidang.x-y.net
Post URL : http://cugz.sjworks.net/bbs/zboard.php?id=open_lec&no=112
저번에 삽질로 일궈낸 CreateCOM이란 놈에 대해 설명이 부족한듯 하기도 하고,
박재성님 말씀도 있고 해서 간단하게 강좌 형식으로
창조에서 ActiveX를 어떻게 써먹을 수 있는지 적어보겠습니다 ^^;
저도 사실 ActiveX란 것에 대해 자세히 아는건 아니지만 -_-;


(1) COM?
일단 왜 라이브러리 이름이 CreateCOM이냐...
창조(Create)에서 COM을 써먹는 라이브러리란 뜻입니다. -_-;

COM은 (아마도) Component Object Model의 약자로,
Component Object란 것이 바로 창조에서 말하는 객체 쯤 되는 것입니다.

그렇다면 이 COM을 쓰면 어떤 점이 좋을까요?

1. 여러 언어를 섞어서 개발할 수 있습니다.
DLL만 만들 수 있으면 되기 때문에 언어 혼용이 가능합니다.
2. 객체의 수명을 자동으로 관리해줍니다.
창조에서처럼 부모가 없어 고아가 된 경우라도, 아무도 쓰지 않는 객체는 자동으로 메모리에서 제거합니다.
3. 일관적인 방법을 제공하여 효율적인 객체 관리를 할 수 있습니다.
객체를 만들고 제거하는 방법은 항상 똑같기 때문에 쉽게 여러 곳에 적용할 수 있습니다.
4. COM 자체가 객체지향적인 모델을 제공합니다.
언어가 객체지향을 제공하지 않더라도, 객체지향적인 모델로 프로그래밍 할 수 있습니다.
5. 하위 호환성을 지원합니다.
기능이 새로 업그레이드 되거나 변경될 경우, 복잡한 DLL 버전 관리를 할 필요가 없습니다.

뭐 대충 이 정도입니다.
ActiveX도 바로 이 COM을 기반으로 둔 기술입니다.


(2) COM에서의 객체 - 인터페이스(Interface)
COM에서 말하는 객체인터페이스라고 부릅니다.
인터페이스란 한 마디로, 기능은 없는 껍데기 같은 것이라고 생각하시면 됩니다.

왜 기능이 같이 붙어있지 않냐면, COM에서는 어떤 객체를 만드는 사람(Implement)과 쓰는 사람(Use)을 분리해놨기 때문입니다.

창조로 예를 들면, ㅇ창이란 인터페이스를 먼저 정합니다.
ㅇ창이란 인터페이스는 보여, 숨겨, 닫아... 같은 명령들이 있고요.

그럼 만드는 사람은 원하는 대로 ㅇ창을 만들어나가면 됩니다.
A란 사람이 만든 ㅇ창은 XP 스타일을 지원하지 못 하고, B란 사람이 만든 ㅇ창은 XP 스타일을 지원할 수도 있습니다.

누가 만드느냐에 따라 기능이 달라질 수도 있지만, 여전히 쓰는 쪽에서는 똑같은 함수(보여, 숨겨, 닫아...)만 호출하면 됩니다.


이렇게 인터페이스란 것을 사용하면, 쓰는 쪽이나 만드는 쪽이나 항상 일관된 방법으로 객체를 만들 수 있습니다. (정해놓은 함수만 가져다 쓰고, 만들기만 하면 되므로...)
ㅇ창에 함수를 더 추가하려면, ㅇ창2 같은 식으로 기능이 더 많은 버전을 하나씩 늘려나가야 합니다.
COM 기반인 DirectX도 마찬가지로, DirectX 9만 깔아도 DirectX 5로 만든 프로그램이 제대로 돌아갈 수 있는 것이죠.


(3) 'ㅎ객체'에 해당하는 'IUnknown'
인터페이스에서도 ㅎ객체같은, 기본적인 인터페이스가 있습니다.
바로 IUnknown이란 놈으로, 이름의 유래는 대략 '아직 뭐가 될지 모르겠다' 정도입니다.

ㅎ객체가 ㅎ창, ㅎ버튼 같은 것을 모두 포함하듯이, IUnknown도 다른 모든 인터페이스의 대표 같은 것입니다.
그래서 인터페이스를 주고 받을 때 IUnknown을 주로 사용합니다.

그럼 IUnknown이 가지고 있는 함수를 볼까요.

AddRef - 이 인터페이스를 새로 만들 때마다 호출해줍니다.
Release - 이 인터페이스를 제거할 때마다 호출해줍니다. 바로 제거되는건 아니고, AddRef 한만큼 Release를 호출해줘야 정말 제거됩니다.
QueryInterface - 이 인터페이스로부터 또 다른 인터페이스를 얻습니다.


제일 중요한 것이 QueryInterface인데, 이것은 창조의 '객체형' 함수와 비슷합니다.
IUnknown이란 것 안에 어떤 다른 인터페이스가 있는지 알아오고 그 인터페이스를 얻을 수 있는 함수입니다.

객체형 함수를 보면, 인자가 ㅎ객체 입니다. 그런데 여기에는 창0을 넣어도 되고, 버튼0을 넣어도 됩니다. 왜냐하면 ㅎ객체란 형은 ㅎ창, ㅎ버튼을 모두 커버할 수 있기 때문입니다.

하지만 ㅎ객체만 가지고는 아무것도 할 수 없습니다.
ㅎ객체는 ㅎ창, ㅎ버튼만이 갖는 특화된 함수나 속성이 없기 때문입니다.
이럴 때 객체형 함수를 쓰면, ㅎ객체가 원래는 무슨 객체인지 알 수 있습니다.

이런 식으로, 다른 모든 인터페이스를 IUnknown으로 나타낼 수 있지만 IUnknown에는 함수가 위 3개 뿐이므로 하고 싶은 것을 할 수 없습니다.
그럴 때 QueryInterface를 써서 진짜 인터페이스를 꺼내올 수 있는 것입니다.


(4) ActiveX의 핵심 'IDispatch'
IUnknown이 (뭔지 모르는) 또 다른 객체들을 꺼내오는게 가능하다면, IDispatch는 (뭔지 모르는) 객체의 함수를 알아올 수 있습니다.

즉 IDispatch는 IUnknown의 확장판입니다.
IDispatch는 IUnknown이 가지고 있는 함수 3개 말고도 무슨 함수를 가지고 있는지 알 수 있는 함수와 또 그 함수를 호출하는 함수(?)까지 4개가 더 있습니다.

IDispatch가 어디서 쓰이느냐면, 특히 스크립트에서 많이 쓰입니다.

Microsoft의 JScript를 예로 들면,




var obj = new ActiveXObject("InternetExplorer.Application")

이런 식으로 ActiveX 개체를 만들 수 있습니다.
그런데, 저 ActiveXObject 생성자로 넘겨주는 문자열은 사용자로부터 입력받을 수도 있고, 다른 어떤 배열의 문자열에서 가져올 수도 있습니다.

즉 무슨 내용이 들어갈지는 실행하기 전까지는 모른다는 뜻입니다.
그렇지만



obj.Navigate("about:home");
obj.Visible = true;

이런 코드가 어떻게 실행이 될까요?
그건 바로 obj란 객체에서 'Navigate'란 함수와 'Visible'이란 속성이 있는지 찾아보고, 있으면 실행하기 때문입니다. (없으면 당연히 오류가 납니다.)

그것을 해주는게 바로 IDispatch며, ActiveX의 아주 기본적인 기술입니다.




다음에는 CreateCOM을 이용해서 실제로 인터페이스나 ActiveX 개체를 만들어서 써먹는 것을 적어보겠습니다.

LIST ALL               GO TO THE TOP


N
   Subject
Posted by
Date
H
119
   창조에서 반올림하기 [1]
지상현 2013/01/05  4965
118
   컴퓨터에서 소수점을 표기하는 방식에 대해 [1]
지상현 2012/01/03  7457
117
   창조의 변수형에 대한 고찰 [1]
지상현 2012/01/03  5735
116
   창조 초보자들을 위한 아주 기본적인 사용법
김대명 2011/03/09  6183
115
   객체 배열을 정복해보자! [1]
지상현 2010/06/28  6903
114
   [0강] 그림판에 그림을 그려보자!
박종훈 2009/10/24  6581
113
     [1강] 그림과 관련된 객체
박종훈 2009/10/24  5719
112
       [2강] ㅎ그림판에 그림을 그리기 위해 준비단계
박종훈 2009/10/24  5928
111
   [수정!] 직선, 사각형, 타원, 원, 호, 현을 그려보자! [4]
박종훈 2009/05/10  6620
110
     [0강] ㅎ배경의 좌표 체계에 대해서 알아보자! [2]
박종훈 2009/10/24  6970
109
       [1강] 직선을 그려보자!
박종훈 2009/10/24  7687
108
         [2강] 사각형을 그려보자!
박종훈 2009/10/24  5584
107
           [3강] 타원을 그려보자! (원 포함)
박종훈 2009/10/24  8329
106
             [4강] 현, 호를 그려보자! [4]
박종훈 2009/10/24  6224
105
     호현계산기2 Rev2 [6]
박종훈 2009/10/23  5828
104
   기타 자료실에 있는 다람쥐어 (파악해 보자_) [2]
김제형 2009/05/03  5738
103
   맞짱! 포인터(Pointer) - 3부 [창조에서 포인터를 사용해보자!] ... 제작중
박종훈 2009/02/26  5898
102
   맞짱! 포인터(Pointer) - 2부 [C언어 포인터 존재를 확인하자!]
박종훈 2009/02/26  7231
101
   맞짱! 포인터(Pointer) - 1부 [C언어 들춰보자!] [7]
박종훈 2009/02/26  6233
100
   자연수들의 합 쉽게 구하는 방법(수학과 프로그래밍) [7]
박종훈 2009/02/15  6086
99
   창조입문 : 메모장 만들기 [2]
신용주 2008/12/20  7490
98
   창조와 ActiveX (2)
지상현 2007/08/11  10736

   창조와 ActiveX (1)
지상현 2007/08/07  8231
96
   골칫거리 ㅎ사용자함수 DLL하나로 해결하기! [7]
박종훈 2007/06/23  7065
95
   환경파일로 파워유저되어보자![개정판] [예제/사용!] 2 [6]
박종훈 2007/01/02  7728
LIST ALL   1 [2][3][4][5] Next
Copyright 1999-2024 Zeroboard / skin by reedyfox in miniwini style
로그인
지우개 Expert 3.0
제작자 : 천호성 님 [LINK]
로그인
대박로또2005
제작자 : 최재일 님 [LINK]
로그인
1박종훈15292 점
2지상현8809 점
3손상진7388 점
4권선중6060 점
5이진백5174 점
로그인
가입일닉네임
05/31김동률
03/31홍형기
09/01o00pp99oo
12/27이재민
11/20이희철
로그인