Programming

TLB 화일 제작하기

콜러스 XXII 2010. 3. 7. 19:59

  

[예전에 한번 했는데 까먹었다가 다시 까먹기 전에 기록으로 남긴다.]

 

최근에 ActiveX(COM) CView에 붙여볼 일이 있었다. 이전 ActiveX들 중 일부는 Type Library File(TLB) 파일을 같이 배포 하였으나 이번에 이용할 것은 TLB를 같이 배포 하지 않았다.

그래서 TLB ActiveX에서 추출 하기로 했다. 다음은 그 순서 이다. (나의 경우)

 

1.     OLE/COM Object Viewer를 연다.

아마 Windows SDK가 깔려 있으면 대부분 이 프로그램은 있을 것이다. 나의 경우 실제 프로그램 경로는 다음과 같다.

C:\Program Files\Microsoft SDKs\Windows\v6.0A\bin\OleView.Exe

 

  

대부분의 ActiveX들은 아마

/Object Classes/Grouped by Component Category/Control

에 등록이 되어 있을 것이다. 테스트로 Adobe PDF Reader를 이용해 본다.

  

2.     해당 Object을 선택한다.

 

  

3.     Type Library 정보를 연다.

해당 Object을 선택한 뒤에 오른쪽 클릭을 하면 Popup 메뉴에서 “View Type Information …” 항목이 있는데 그것을 선택하면 다음과 같은 창이 다시 뜬다.

 

  

왼쪽이 해당 Object의 개요를 나타내고 오른쪽이 IDL을 나타낸다.

 

4.     IDL을 저장한다.

Object Viewer에서 IDL을 저장하는 방법은 2가지가 있다. 첫 번째는 메뉴의 Save를 선택하는 것이고 다른 하나는 IDL View에서 직접 Copy & Paste하는 방법이 있다.

먼저 첫번째 방법으로 해보면 Text로 저장을 하는데 UNICODE로 하는지 몰라도 다음과 같이 저장이 된다.

 

  

@.@ 모든 글자가 1개씩 Space가 들어가 있다. 실제 이용해보진 않았지만 Compile에러가 날것 같다. 그래서 그냥 Copy & Paste 해서 저장한다.

 

  

5.     저장된 IDL Compile한다.

이것도 여러 가지 방법이 있지만 개인적으로 IDL을 직접 Compile하는 것을 선호한다. 위에서 저장한 AdobePDF1.i이을 대상으로 Compile해본다.

Compile을 하기 위해서는 midl을 이용하게 되는데 VS Command Prompt DOS창을 열어서 실행해야 한다.

 

  

IDL이 저장된 곳으로 이동해서 Compile을 해본다.

 

midl.exe AdobePDF1.idl

 

이라고 입력하면 된다. 아마 처음 입력하면 에러가 좀 많이 나올 텐데 적당히 고치도록 한다. 일단 AdovePDF1.idl만을 기준으로 생각해 보도록 한다.

 

먼저 IDL single Type 때문에 Compile이 되지 않는데 이것을 float으로 고치도록 한다.

그런 뒤 Compile하면 드디어 TLB가 생긴다.

 

l  사실 Type Library를 꼭 써야 하는 건 아니다. VS에서 ActiveX를 이용하는 많은 방법이 있는데 일반적으로 그냥 Object Wrapper Class 그대로 만들어도 되지만 이 방법을 쓰면 보통은 Dispatch하는데 시간이 좀 많이 걸린다. (C#이 그런 면에서 좀 쥐약이다. WPF까지 쓰면 ActiveX를 쓰는데 무려 3단계의 Call이 더 생긴다.) 고성능 즉 Call이 빈번하게 일어날 경우 Dispatch를 거치지 않고 바로 Call을 할 수 있는 방법이 있는데 이때 TLB 파일이 이용된다. (다음에 소개)