Programming/Visual Basic

VB를 이용한 ActiveX 제작

bcheul 2008. 2. 21. 08:14
Part 1. ActiveX 컨트롤 제작
1. ActiveX 컨트롤 프로젝트
VB 6.0은 ActiveX 컨트롤을 프로젝트로 구분해서 지원한다. VB로 ActiveX 컨트롤을 개발하는 것은 일반 폼 어플리케이션을 개발하는 것과 매우 유사하다. 그 말은 무척이나 쉽다는 뜻이다.
ActiveX를 제작하기 위해서는 몇 가지 다른 방법을 사용할 수 있다.
여기서는 필자가 주로 사용하는 방법대로 ActiveX 컨트롤 프로젝트와 표준 EXE 프로젝트를 프로젝트 그룹으로 만들어 제작하는 과정을 설명하겠다.
 
2. 프로젝트와 프로젝트 그룹 생성
먼저 표준 EXE 프로젝트를 생성한다.

<그림 1-1> 표준 EXE 프로젝트 생성
새 프로젝트 창이 이상하다!
맞다.. 이것은 필자가 허접한 플러그인 프로그램을 설치한 덕분에 발생한 일이다. 비록 일부 창이 이렇게 망가지는 경향이 있지만 나름대로 유용한 프로그램이다.

<그림 1-2> 생성된 표준 EXE 프로젝트
자. 다음은 '파일' 메뉴의 '프로젝트 추가' 항목을 선택해서 'ActiveX 컨트롤' 프로젝트를 추가하자.

<그림 1-3> 프로젝트 추가 메뉴

<그림 1-4> ActiveX 컨트롤 프로젝트를 추가한다

<그림 1-5> 추가된 ActiveX 컨트롤 프로젝트
혹시 아직까지 사용자 정의 컨트롤이나 ActiveX 프로젝트를 만들어본 경험이 없다면 이쯤에서 강좌를 닫고 책을 보며 공부하자. 이 강좌는 그런 부분을 자세히 다루지 않는다.
프로젝트 탐색기를 보면 'Group1' 이라는 이름의 프로젝트 그룹이 자동 생성되어 두 프로젝트 Project1 과 Project2 를 포함하고 있음을 볼 수 있다.
여기서 표준 EXE 프로젝트는 ActiveX 컨트롤을 테스트 하기 위한 테스트 환경으로써의 역할을 수행할 것이다.
 
3. 간단한 ActiveX 컨트롤 작성
이제 간단하게 ActiveX 컨트롤을 제작해보자.
작성하게 될 컨트롤은 ActiveX 컨트롤 예제로 곧잘 사용되는 '타이머 라벨' 이다. 별로 유용하지는 않지만 만들기는 쉽다.
다음과 같은 컨트롤을 만든다.

<그림 1-6> 컨트롤 레이아웃
Name Type Property
UserControl1 UserControl -
lblTimer Label Caption = ""
Font - Size = 18
Timer1 Timer Interval = 1000
타이머 이벤트 핸들러를 다음과 같이 작성한다.
Option Explicit

Private Sub Timer1_Timer()
    lblTimer.Caption = CStr(Time)
End Sub
매 초마다 lblTimer 의 Caption 프로퍼티에 시간을 나타내 주는 간단한 구문이다.
 
4. 테스트
작성이 완료되었으면 테스트를 해보자.
ActiveX 컨트롤은 VB 에서도 웹브라우저를 이용해서 실행해준다. 이 작업은 컨트롤 ocx와 html을 생성하고 레지스트리에 ocx 컨트롤을 추가한 뒤 웹브라우저가 실행되는 복잡한 과정을 VB 가 처리하게 되므로 심히 안쓰럽다. 이 과정이 심히 느리다는 것은 결코 아니다.
따라서 우리는 앞서 추가한 표준 EXE 프로젝트를 통해 컨트롤의 작동을 테스트 해보기로 하자.
먼저 앞서 작성한 UserControl1 의 컨트롤 디자인 창을 닫는다. 매우 중요한 일이므로 빨간색에 두꺼운 글씨로 표시했다.
열려있는 컨트롤 디자인창이 존재하면 VB IDE 는 해당 컨트롤이 포함된 프로젝트를 컴파일 하지 못한다.
다음에는 Project1 의 Form1 에 앞서 제작한 UserControl1 컨트롤을 추가한다.

<그림 1-7> Form1에 UserControl1 추가
컨트롤을 화면에 추가하는 것 만으로도 시간이 표시되고 또 매 초마다 시간이 바뀐다. 이젠 별로 놀랍지도 않다. (필자가 처음 이 예제를 실행시켰을 때는 누군가에게 보여주고 싶어서 안달이 났었다.)
자. 완성이 되었으니 F5를 눌러 실행시켜보자.

<그림 1-8> 프로젝트 실행 화면
겨우 두줄 쓰는데 5분이나 걸렸다.
혹시 실행하려는데 다음과 같은 창이 보인다면

<그림 1-9> 프로젝트 속성
처음 프로젝트를 생성할 때 '표준 EXE' 프로젝트부터 생성한 것이다. 이럴 때에는 프로젝트 탐색기에서 표준 EXE 프로젝트인 Project1 (Form1 을 포함하고 있는)을 마우스 오른쪽 버튼으로 클릭해서 '시작 프로젝트로 설정(U)' 항목을 선택하면 된다.

<그림 1-10> Project1 을 시작 프로젝트로 설정한다
아무튼 실행은 되었다. 실행이 되지 않는다면 주저 없이 게시판을 통해 질문을 하기 바란다.
5. 컴파일
이제 프로젝트 그룹에 포함된 모든 파일을 저장하고 제작된 ActiveX 컨트롤 프로젝트를 컴파일 해보도록 하자.
프로젝트 탐색기에서 Project2를 선택한 후 파일 메뉴의 Project2.ocx 만들기 항목을 선택한다.

<그림 1-11> ActiveX 프로젝트 컴파일
컴파일이 완료되면 Project2.ocx 파일이 생성되게 된다. 이것이 바로 우리가 제작한 ActiveX 컨트롤이다.
 
6. 다음은
완성된 ActiveX 컨트롤 프로젝트를 '패키지 및 배포 마법사'를 이용해 인터넷 패키지로 만드는 과정을 배워 보도록 하자.
 
Part 2. 인터넷 배포 패키지 제작
1. 패키지 및 배포 마법사
Visual Studio 6.0 을 설치하면 '패키지 및 배포 마법사' 라는 프로그램이 설치된다. 이것은 Visual Basic 6.0 프로젝트의 배포판을 제작하는데에 사용된다.

<그림 2-1> 시작 메뉴의 패키지 및 배포 마법사
스크린 샷을 보여줄 때마다 필자의 데스크탑 정보가 줄줄 새나가고 있는 기분이다.
Windows 2000 Server를 사용하고 Winamp를 들으면서 그림판과 FrontPage를 이용해 강좌를 제작하고 있다.

<그림 2-2> 패키지 및 배포 마법사
 
2. 인터넷 패키지 제작
이제 Part1 에서 제작한 프로젝트를 이용해 인터넷 배포 패키지를 제작해 보자.
프로젝트 선택 항목의 찾아보기 버튼을 눌러 Part1 에서 저장한 ActiveX 컨트롤 프로젝트 파일 'Project2.vbp'을 선택하자.
선택을 마쳤으면 창의 왼쪽에 있는 '패키지(P)' 버튼을 누른다.

<그림 2-3> OCX 파일 없음 경고창
만약 위와 같은 오류가 발생했다면 Part1의 목차 5를 생략한 것이다. 혹시 VB 에 Project2가 열려있다면 이를 닫고 오류창의 '컴파일' 버튼을 누르면 된다.

<그림 2-4> 프로젝트 수정 경고창
만약 위와 같은 오류가 발생했다면 프로젝트를 컴파일 한 후에 프로젝트가 다시 저장된 것이다. 변경된 내용을 적용하려면 '예'를 선택해 다시 컴파일하고 이미 컴파일 했던 ocx 파일을 그대로 사용하려면 '아니오'를 선택한다.
다음에는 패키지 형식을 선택한다. 우리는 웹 배포를 위해 '인터넷 패키지' 항목을 선택한 뒤 '다음' 버튼을 눌러 작업을 진행하면 된다.

<그림 2-5> 패키지 형식 선택 항목
패키지 폴더 항목 및 포함된 파일 항목은 Enter 키를 연타하며 통과한다. 모두 올바른 설정이 기본값으로 선택되어 있다.

<그림 2-6> 패키지 폴더 선택 항목 - 몇 가지 질문사항이 있지만 Enter. Enter.

<그림 2-7> 포함된 파일 선택 항목
혹시 정말 궁금한 항목이 있으면 게시판을 통해 질문해주기 바란다.

<그림 2-8> 파일 원본 선택 항목
중요한 항목에 도달했다. 웹을 통해 배포하기 위해서는 설치될 시스템에도 VB 런타임을 비롯한 여러 라이브러리 파일들이 필요하게 된다. 이 파일들은 배포시에 Cab 파일에 모두 포함시킬 수도 있고 Microsoft 웹 사이트나 지정한 사이트를 통해 다운로드 하도록 설정할 수 있다.
Cab 파일에 모든 라이브러리를 포함시키면 Cab 파일의 용량이 커지고 이미 등록된 라이브러리 파일도 같이 다운 받게 된다는 단점이 있지만 Microsoft 웹 사이트나 다른 대체 웹사이트에 의존하지 않는다는 점에서 안정적이다.
Microsoft 웹 사이트에서는 version 별로 VB의 런타임 및 기타 라이브러리를 등록해두고 있다. 원한다면 자신의 홈페이지에 라이브러리 파일을 등록해두고 '대체 웹 사이트에서 다운로드' 를 선택한 후 해당 라이브러리의 URL을 적어줄 수도 있다.
필자는 대체 웹 사이트에서 다운로드 하도록 설정하는 것을 권하고 있지만 여기서는 안전하고 간단한 배포를 위해 모든 라이브러리 파일을 Cab 파일에 포함시키도록 하자.
각 파일을 선택하고 파일 원본을 '이 Cab 파일에 포함(I)' 으로 선택한다.
다음으로 안전 설정 항목을 보게 된다.
UserControl1 의 안전 설정을 모두 '예' 로 선택한다.

<그림 2-9> 안전 설정 선택 항목
최종적으로 '마침' 을 선택하면 패키지 작업이 시작된다. 패키지 완료되면 보고서를 저장할지 묻는데 이것은 좋을 대로 하자.
프로젝트 폴더의 하위에 Package 폴더가 생성되고 다음과 같은 몇 개의 파일이 보인다.

<그림 2-10> 프로젝트의 Package 폴더
Project2.CAB 파일은 컨트롤과 라이브러리가 포함된 압축파일이다. 이것이 바로 웹을 통해 배포될 것이다.
1.2MB 라는 큰 용량이지만 현재의 인터넷 환경을 고려한다면 그다지 큰 것은 아니다.
참고로 모든 라이브러리를 Microsoft나 대체 웹 사이트로 전환할 경우 CAB 파일의 크기는 11KB 로 줄어든다.
Project2.HTM 파일은 UserControl1을 웹 페이지에서 사용하는 예제를 보이고 있으며 내용은 다음과 같다.
<HTML>
<HEAD>
<TITLE>Project2.CAB</TITLE>
</HEAD>
<BODY>
<!-- 이 페이지의 모든 컨트롤에 사용권이 필요하면
사용권 패키지 파일을 만들어야 합니다. LPK_TOOL.EXE를 실행하여
필요한 LPK 파일을 작성합니다. LPK_TOOL.EXE는 ActiveX SDK,
http://www.microsoft.com/intdev/sdk/sdk.htm에 있습니다. Visual
Basic 6.0 CD를 갖고 있으면 \Tools\LPK_TOOL 디렉터리에서 찾을 수 있습니다. 개체 태그의 예제입니다:

<OBJECT CLASSID="CLSID:5220cb21-c88d-11cf-b347-00aa00a28331">
<PARAM NAME="LPKPath" VALUE="LPKfilename.LPK">
</OBJECT>
-->

<OBJECT ID="UserControl1"
CLASSID="CLSID:52FEA1F9-1FAA-4F9F-8084-674A8E24FDAB"
CODEBASE="Project2.CAB#version=1,0,0,0">
</OBJECT>
</BODY>
</HTML>
HTML 의 Object 태그를 이용해서 UserControl1의 ClassID를 설정하고 포함하고 있는 CAB 파일의 경로 및 버전등을 나열하고 있다.
앞의 주석문에 보면 http://www.microsoft.com/intdev/sdk/sdk.htm 에서 ActiveX SDK를 구할 수 있는 것처럼 설명하고 있지만 이미 오래전 얘기다.
최신 버전의 ActiveX SDK는 다음 주소에서 download 받을 수 있다.
참고로 말하자면 다운로드 받게되는 Activex.exe 파일은 그대로 실행할 경우 압축되어 있는 여러 폴더의 모든 파일들이 같은 폴더에 중복되어 나타나게 되므로 반드시 -d 옵션을 이용해서 폴더별로 압축을 풀도록 해야 한다.
D:\My Project\ActiveX SDK> activex -d
이런. 다음 강좌의 내용을 앞질러 버린 것 같다.
본론으로 돌아가서.
 
3. 테스트
완성된 패키지가 정상적으로 동작하는지 테스트 해보도록 하자.
웹브라우저를 이용해서 Project2.HTM 파일을 Open 해본다.

<그림 2-11> ActiveX 컨트롤이 웹브라우저에서 작동되는 모습
시간이 변하는 것을 확인할 수 있다.
 
4. 다음은
앞서 제작된 ActiveX 컨트롤과 HTML 페이지를 홈페이지에 등록시켜 놓는다고 모든 방문객이 이와 같은 모습을 볼 수 있는 것은 아니다.
그 이유와 해결 방법을 다음 단원에서 배워보자.
 
Part 3. 인증서 제작 및 패키지 인증
1. 인증서란 무엇인가
컴퓨터에 설치된 ActiveX 컨트롤은 응용프로그램과 같은 수준의 위력을 갖게 된다. 즉, 각종 파일을 생성, 수정 및 삭제 할 수 있고 심지어 하드디스크를 포멧하는 명령을 수행할 수도 있는 것이다. 따라서 ActiveX 컨트롤을 웹으로 배포하는 데에는 MS가 지정한 배포 절차에 따라 인증 기관(Certification Authority)으로 부터 인증서를 발급 받아야 한다.
인증은 보험 시스템과 유사하다. 개발자나 개발사에서는 자신들이 일정 기간 동안 웹을 통해 배포할 ActiveX들에 대해 비용을 지불하고 책임을 의뢰하게 된다. 인증 기관(CA)은 공개키로 암호화된 인증서를 발급하여 배포자 및 인증 기관의 신원을 보장한다.
인증서는 '보증서'라고도 불리며(Certification; 증명서, 인증서, 보증서) 공개키와 함께 파일로 발급된다.
인증되지 않은 ActiveX 컨트롤은 웹 배포가 불가능하며 프로그래머는 테스트를 위해서 테스트용 인증서를 제작할 수 있다.
 
2. ActiveX SDK 설치
테스트용 인증서를 제작하기 위해서는 ActiveX SDK가 필요하다.
최신 버전의 ActiveX SDK는 다음 주소에서 download 받을 수 있다.
참고로 말하자면 다운로드 받게되는 Activex.exe 파일은 그대로 실행할 경우 압축되어 있는 여러 폴더의 모든 파일들이 같은 폴더에 중복되어 나타나게 되므로 반드시 -d 옵션을 이용해서 폴더별로 압축을 풀도록 해야 한다.
D:\My Project\ActiveX SDK> activex -d
MSDN 사이트에서 다운 받기 곤란한 경우에는 다음 링크를 통해 다운 받을 수 있다.
압축을 풀고 나면 SETUPSDK.EXE 파일을 실행시켜 현재 폴더로 설치를 완료해야 한다.
그리고 반드시 다음 파일을 다운받자. 어찌된 영문인지 ActiveX SDK 에 누락된 중요한 DLL 파일이다.

<그림 3-1> ActiveX SDK 설치
설치 과정에서 몇 가지 샘플 파일이 없다고 나올 것이다. 이것은 무시(Ignore)하도록 하자.

<그림 3-2> ActiveX SDK 설치 완료
설치를 완료했다. 이런... 이 SDK 는 Internet Explorer 3.0 시절에 만들어진 것이었다.
설치한 드라이브의 \INetSDK 폴더에 ActiveX SDK 가 설치되었다.
앞서 다운받은 digsig.dll 파일은 \INetSDK\Bin 폴더에 복사하도록 하자. 이 파일이 없으면 인증서를 생성할 수 없다.
앞으로 인증에 사용하게 될 모든 실행 파일은 \INetSDK\Bin 폴더에 있다.
 
3. 인증서와 공개키 생성
인증서는 공개키와 한 쌍을 이룬다. 공개키와 인증서를 생성하는 프로그램은 MAKECERT.EXE 이다. 다음과 같이 테스트용 인증서와 공개키를 생성한다.
makecert -r -n:"CN=이창연 보증서" -k:test.pvk test.cer

<그림 3-3> MAKECERT 프로그램을 이용해 테스트용 인증서와 공개키를 생성한다
공개키(test.pvk)와 인증서(test.cer) 파일이 생성되었다.
 
4. SPC 파일 생성
솔직히 말해서 SPC(Software Publishing Credentials) 파일의 용도가 무엇인지 필자는 잘 모른다. 다만 탐색기를 통해서 볼 때 CER 파일은 '보안 인증서' 로 나타나며 SPC 파일은 'PKCS #7 인증서' 로 나타나는것으로 보아 뭔가 용도에 따라 다른 암호화 방식이 적용된 것이리라 예상할 따름이다. 이에 대해 자세히 아시는 분은 연락 바란다.
아무튼 Cab 파일 인증을 위해서는 반드시 필요한 파일이므로 다음과 같이 생성한다.
CERT2SPC test.cer test.spc
test.cer 인증서 파일을 바탕으로 test.spc 파일이 생성되었다.
 
4. Cab 파일 인증
이제 생성된 인증서와 공개키를 이용하여 앞서 제작했던 ActiveX 컨트롤의 Cab 파일(Project2.CAB)을 인증해 보자.
Cab 파일 인증은 SIGNCODE.EXE 프로그램을 이용한다. 이 프로그램은 GUI 인터페이스를 지원한다.

<그림 3-4> SIGNCODE 프로그램
자. 다음(Next)을 클릭하고 넘어가자.

<그림 3-5> Target CAB 파일 선택
어느 파일을 인증할 것인지 선택해 준다. 아래 두 개의 항목은 프로그램의 이름과 배포자의 정보를 적는다.

<그림 3-6> 암호화 방식 선택
암호화 방식을 선택한다. 여기서는 기본적으로 선택되어진 Microsoft Base Cryptographic Provider v1.0 을 사용했다.
(솔직히 다른건 써본 적이 없다)

<그림 3-7> SPC, 공개키, 해시방식 선택
다음으로는 인증서와 공개키를 선택하는 화면을 볼 수 있다. 열씸히 제작한 SPC 파일과 PVK 파일을 선택해 준다.
마지막 항목은 인증에 사용할 해시함수를 선택하는 것인데 MD5를 많이 쓰는 것 같으니 그냥 통과한다.

<그림 3-8> 입력 확인
마지막으로 사용자의 입력 값을 열거해 보여주면서 최종 확인을 한다. 입력에 문제가 없다면 다음(Next)을 클릭한다.

<그림 3-9> 인증 확인
이게 정말 마지막이다. 정말 인증하고 싶으면 Sign을 누르라고 쓰여 있다.
Sign 버튼을 누르자.

<그림 3-10> 인증 완료
인증이 성공적으로 수행되었다.
이제 우리가 제작한 (허접하지만..) 타이머 레이블 컨트롤(UserControl1)을 웹을 통해 배포할 수 있게 되었다!!
 
5. 웹 배포 및 테스트
파일을 업로드 할 수 있는 웹 사이트에 Project2.CAB 파일과 Project2.HTM 파일을 업로드하자.
필자는 필자의 개인 홈페이지의 다음 폴더에 업로드 하였으니 테스트를 원한다면 확인해보아도 좋다.
 
자. 다음은 테스트다. 어디 놀고 있는 PC가 있는지 확인해 보자.
필자의 좋은 후배인 O군에게 위 링크를 클릭하도록 하고 다음 두 장의 스크린샷을 얻을 수 있었다.

<그림 3-11> 보안 경고창
이 인증서는 테스트를 위해 발급되었으므로 인증 기관으로부터 확인되지 않음을 경고하고 있다.
하지만 배포자(이창연 보증서)가 배포한 '테스트용 타이머 레이블 컨트롤'을 설치하고 실행할지 묻고 '예'를 선택하면 설치가 진행된다.

<그림 3-12> 실행 화면
이와 같이 다른 PC 에서도 실행되는 것이 확인 되었다.
 
6. 버전 업그레이드
아직 다 끝난 것이 아니다.
한번 설치된 ActiveX 컨트롤이 완전하지 않을 수도 있고 기능을 수정해서 업그레이드 하고 싶을 때에는 어떻게 해야 하는가?
단지 수정된 프로젝트를 컴파일 하고 인증하는 것으로는 해결되지 않는다. 무엇이 문제일까?
그것은 프로젝트가 수정되었음에도 불구하고 한번 할당된 ClassID 는 고유한 값으로 유지되기 때문이다. 따라서 새로운 ClassID를 발급받아 사용하면. 즉, 새로운 프로젝트를 만들어서 내용만 복사해 컴파일 한다면 웹브라우저는 이것을 완전히 다른 ActiveX 컨트롤로 인식하고 다시 다운로드 하게 된다. (실제로도 완전히 다른 컨트롤임이 분명하다)
하지만 이것은 그다지 편리한 해결책이 아니다. 컴파일 할 때마다 새로운 프로젝트를 만들어야 한다니...
과연 ActiveX 의 버전 관리는 어떻게 이루어지는가?
Project2.HTM 파일을 다시 훑어보자.
<HTML>
<HEAD>
<TITLE>Project2.CAB</TITLE>
</HEAD>
<BODY>
<!-- 이 페이지의 모든 컨트롤에 사용권이 필요하면
사용권 패키지 파일을 만들어야 합니다. LPK_TOOL.EXE를 실행하여
필요한 LPK 파일을 작성합니다. LPK_TOOL.EXE는 ActiveX SDK,
http://www.microsoft.com/intdev/sdk/sdk.htm에 있습니다. Visual
Basic 6.0 CD를 갖고 있으면 \Tools\LPK_TOOL 디렉터리에서 찾을 수 있습니다. 개체 태그의 예제입니다:

<OBJECT CLASSID="CLSID:5220cb21-c88d-11cf-b347-00aa00a28331">
<PARAM NAME="LPKPath" VALUE="LPKfilename.LPK">
</OBJECT>
-->

<OBJECT ID="UserControl1"
CLASSID="CLSID:52FEA1F9-1FAA-4F9F-8084-674A8E24FDAB"
CODEBASE="Project2.CAB#version=1,0,0,0">
</OBJECT>
</BODY>
</HTML>
두 번째 OBJECT 태그의 CODEBASE 옵션에서 version 이라는 문구를 찾을 수 있다.
바로 이것이다. version의 값이 높은 값으로 수정되면 새로운 버전으로 인식하고 웹브라우저는 Project2.CAB 파일을 다시 다운로드 하여 설치할 것이다.
VB 6.0 은 이 version 값을 해당 프로젝트의 version 으로 채워넣어준다. Project2.vbp 프로젝트나 Group1.vbg 프로젝트 그룹을 열어서 Project2 의 프로젝트 등록정보를 살펴보자.

<그림 3-13> 프로젝트 속성
프로젝트 속성 창의 만들기 탭의 버전 번호 항목의 자동 증가 옵션을 선택한다.

<그림 3-14> 프로젝트 속성 - 만들기 탭
이제 Project2 프로젝트는 컴파일 될 때마다 수정(Reversion) 값이 1씩 증가하게 되었다. 다시 컴파일 후 Part 2 의 과정을 거쳐 인터넷 패키지를 생성해 보자.
생성된 Project2.HTM 파일의 version 에는 1,0,0,1 이라는 값이 씌여져 있을 것이다.
 
주의할 점은 여러분이 결코 Project2.HTM 파일을 직접 사용하지 않을 것이라는 점이다.
홈페이지의 특정 문서에 OBJECT 태그를 이용해 컨트롤을 사용하도록 해 놓았다면 새로운 빌드(새로운 컴파일 버전)가 컴파일 될 때마다 여러분은 직접 OBJECT 태그의 CODEBASE 옵션에서 version 값을 수정해 주어야 한다.
 
7. 마치며
VB 6.0 은 ActiveX 컨트롤 제작을 위한 가장 손쉬운 개발 툴이다. 하지만 웹 배포를 하지 못한다면 그것은 반쪽 짜리 기술일 뿐이다.
이 강좌를 통해 ActiveX의 놀라운 힘과 VB의 놀라운 편리함이 결합될 수 있기를 희망한다.