반응형

정말 간만이다.


마지막 포스팅이 언제였던가....

꾸준히 써야겠다는 생각으로 간만에.... 다시 ATL/COM에 대해 써본다.


뭐 어찌됐건 시작해보자.


IDL이 COM에서 언어독립성을 보장하기 위한 인터페이스 정의 언어라는것은 이전 포스트에서 설명을 마쳤다.


조금더 이 IDL에 대해 들어가보자.


일단 IDL이 (Interface Definition Language)라는 걸 기억하자.

말그대루 인터페이스 정의 언어이다.

풀어서 얘기하면 Interface에 대한 정의만을 기술하는 언어인 것이다.

인터페이스를 통한 실제 구현부는 이 언어는 기술하지 않는다.

오로지 인터페이스만을 기술한다.


우리가 만들거나 사용할 COM 객체에 접근하는 방법만을 정의할뿐....

COM객체의 내용은 IDL에는 포함되지 않는다.

중요한 부분이니 기억하자.(만일 이해가 가지 않는다면 인터페이스 프로그래밍 관련 서적이나

인터페이스를 중시하는 또 하나의 언어인 JAVA에 대한 서적에서 인터페이스 상속등을 참고하면 이해하기 쉽다.)


Microsoft는 IDL을 사용하기 위해 MIDL이라는 Compiler를 제공한다.

ATL과 같은 COM 관련 Library를 사용하는 경우에는 사용할 일이 없지만,

COM의 구조와 돌아가는 방식을 이해하기 위해서는 MIDL Compiler의 Output을 알아두는 것이

의미가 있으니 조금만 자세히 보자.


MIDL로 IDL로 작성된 파일을 컴파일하면, 다음과 같은 이름의 파일을 생성해낸다.

a.idl을 컴파일하면


a.h

a_i.c

a.tlb


a_p.c

a.data.c


이와 같은 다섯개의 파일이 생성된다.

a.h는 인터페이스 정의를 포함하는 헤더이며,

a_i.c는 GUID를 담고있는 파일이다.

a.tlb는 C나 C++이 아닌 다른 언어를 위한 바이너리 형태의 라이브러리이다.


뒤의 a_p.c 와 a.data.c는 Proxy와 Stub 코드를 위한 것이다.

Proxy와 Stub 그리고 Marshalling에 대한 설명을 했었나?

음.....

이건 그리 중요하지 않으니.... 나중에 보고 앞의 3가지를 보자...


생성된 COM Object를 사용하기 위해서는 위의 3가지 파일이 있어야 한다.

그리고 뒤의 두가지 파일은 Local COM 객체나 Distributed COM을 사용하기 위해 필요하다.


결국 IDL로 소스 작성하고 나서, 컴파일러로 그 언어에 맞는 소스 파일을 생성하고,

그를 이용하여 COM을 작성하게 되는 과정이다.


ATL로 COM작성시에도 역시 같으며, 내부적으로 숨겨져 있을 뿐이다.

IDL이 사실은 별거 아니라는 게 당신의머리속에 남길 바라며.... 휘리릭...

반응형

+ Recent posts