- COM은 인터페이스와 클래스를 별개의 엔티티로 바라보기에, COM 클래스(또는 인터페이스)는 서버가 노출 가능한 구체적(concrete) 데이터 타입을 언어 중립적으로 설명하는 IDL 내에 정의된다.
- COM IDL 파일은 MIDL 컴파일러에 의해 파싱되어 COM 개체 구현을 위한 C/C++ 헤더, 타입 라이브러리, marshaler, 각종 GUID 정의 파일이 만들어진다.
: C/C++ 타입 정의 헤더 파일이다.
: GUID 정의 파일이다.
: C/C++가 아닌 언어를 위한 타입 라이브러리이다.
: 인터페이스 marshaler 정의 파일이다.
: 인터페이스 marshaler의 in-process server 코드이다.
IDL 내의 키워드interface : 인터페이스의 이름을 지정한다.
coclass : 컴포넌트 개체가 지원하는 인터페이스의 목록을 나타낸다.
library : MIDL 컴파일러로 하여금 선언부 안에서 참조된 인터페이스와 클래스에 대한 타입 라이브러리 정보를 생성하게끔 한다.
dispinterface :
IDispatch::Invoke를 통해 호출 가능한 속성과 메서드의 집합을 정의한다.
dispinterface는 지원하는 메서드와 속성을 명시적으로 나열하거나, 인터페이스를 나열하여 정의될 수 있다.
importlib : 타 타입 라이브러리에 담긴 타입이 본 지정자가 정의된 라이브러리에 생성되도록 한다.
import : C/C++의 include와 비슷한 역할을 한다.
주요 특성(attribute) 목록object : interface에만 적용되며 해당 interface가 COM interface임을 나타낸다(없으면 DCE RPC interface가 된다). COM interface는 여러 버전의 동일 인터페이스를 지원하지 않으므로, object 특성은 version과 함께 사용할 수 없다. 각기 다른 버전의 인터페이스는 상속을 통해야 한다.
uuid : 적용되는 요소에 대한 uuid(Universally unique identifier)를 지정한다
helpstring : 본 특성이 적용되는 요소에 대한 설명을 나타내는 데 쓰인다. 적용 가능 대상은 lirary, importlib, interface, dispinterface, module, coclass, typedefs, properties, method이다.
object
dual : dual 인터페이스임을 나타낸다. 즉 IDispatch::Invoke()와 vtable 모두를 통해 해당 메서드 및 속성에 접근 가능하다는 뜻이다.
nonextensible : IDispatch 구현이 오직 interface description에 나타난 메서드와 속성만 포함함을 지정한다(기본적으로 Automation은 run-time에 멤버를 추가할 수 있다)
reference:
Essential COM, Don Box
MSDN
댓글을 달아 주세요