IDL 파일, TypeLibrary, 그리고 Automation
Automation(자동화)으로 생성하지 않았던 Project에 자동화 기능을 추가함에 있어
몇가지 알아야할 사항이 있다.
-------------------------------------------------------------------------------
[ uuid(E4029F3C-B8DE-45A0-A190-2C5A8B240487), version(1.0) ]
library TypeLibTest
{
importlib("stdole32.tlb");
importlib("stdole2.tlb");
// CTypeLibTestDoc의 기본 디스패치 인터페이스
[ uuid(DBF2D3CB-9991-4D7F-954C-2DDF53B597DF) ]
dispinterface ITypeLibTest
{
properties:
methods:
[id(1), helpstring("메서드 Test")] LONG Test(LONG lTemp, LONG* lpTemp);
};
// CTypeLibTestDoc의 클래스 정보
[ uuid(41BB86A1-7049-4C43-92DC-07C3E5629C6C) ]
coclass CTypeLibTestDoc
{
[default] dispinterface ITypeLibTest;
};
};
-------------------------------------------------------------------------------
위 기본적인 IDL 파일에는 세가지 uuid가 있다.
TypeLibrary ID : 타입라이브러리 아이디로 CWinApp를 상속하는 클래스에서 InitInstance 부분에서
등록된다.
DispInterface ID : Coclass로 정의된 CTypeLibTestDoc의 인터페이스를 정의하는 ID로 CTypeLibTestDoc
내에서 Interface로 정의된다. 이 dispinterface에 정의된 메쏘드 및 속성은 Coclass에서 정의되어야 한다.
(IDL 파일에 정의하지 않고, Coclass에만 정의해도 되는 듯 하나 나중에 코드 관리가 어려워진다.)
그리고 마지막 coclassID : Inteface ID와 연결된 Coclass의 uuid로 TypeLibrary와 마찬가지로
CWinApp를 상속하는 클래스의 InitIntance 부분에서 등록된다.
이러한 TypeLibrary 를 기존 Project에 추가하기 위해서는 몇가지 추가작업이 더 필요하다.
그 중에서,
resource를 직접 편집하여 TypeLibrary를 등록하는 부분이 필요하다.
그리고
프로젝트 속성에서 Post-Build Event에서 $(TargetPath) /register를 등록하면
컴파일시 등록까지 할 수 있도록 설정할 수 있다.
이에 대한 좀더 자세한 내용은 CodeGuru에서 퍼온 다른 글을 참고하기 바람.
( Adding automation to MFC applications )