본문 바로가기

Window Programming/VB

■ ActiveX DLL 프로그래밍하기 (3.2 ActiveX DLL 작성하기 )

■ ActiveX DLL 프로그래밍하기

3.2 ActiveX DLL 작성하기

비주얼 베이직 6.0의 프로젝트 메뉴에서 새로운 메뉴가 ActiveX DLL와 ActiveX EXE이다. 4.0부터 있었던 기능이지만 OLE 자동화 서버를 구체적으로 제작할 수 있도록 새롭게 추가된 것이다. 지금부터 ActiveX DLL에 대해서 알아보기로 하자.

1) OLE 자동화 서버(Automation Server)

OLE 자동화 서버는 윈도우의 레지스트리에 등록된 DLL이나 EXE 파일들을 가리킨다. 이들은 앞서 설명한 것과 같이 COM 오브젝트 서버로 기능을 수행한다. 이와같은 COM 컴포넌트들을 비주얼 베이직에서 ActiveX DLL과 ActiveX EXE를 통해 제작이 가능하다.

ActiveX DLL이나 ActiveX EXE로 만들어진 프로그램은 다른 프로그램에서 컴포넌트로 사용될 수 있다. 그러므로 이들 ActiveX 프로그램들은 다른 프로그램에게 자신의 기능들을 제공해주는 역할을 수행한다. 따라서 이들을 서버(Server)라고 부르며, 이들을 사용하는 프로그램들을 클라이언트(Client)라 부른다.

이와 같은 OLE 자동화 서버는 크게 서버와 클라이언트가 동일한 프로세스 영역을 사용하는 In-Process 서버와 클라이언트와 다른 프로세스 영역을 사용하는 Out-of Process 서버로 나누어진다.

ActiveX DLL의 경우 In-Process 서버를 작성하게 되며 하나의 프로세스 안에서 동작하기 때문에 실행속도가 빠르다는 장점이 있다. 그리고 ActiveX EXE의 경우 Out-of Process 서버를 작성하게 되며 서버와 클라이언트가 다른 프로세스를 사용하게 되므로 실행 속도가 느린 단점이 있다. 그러나 공유의 프로세스 공간과 독립된 실행 쓰레드를 사용하므로 원격서버나, 비동기 실행 등 폭넓은 응용구조를 가질 수 있는 장점이 있다. 즉 분산환경을 지원하며 다른 컴퓨터에서도 네트워크를 통해 실행이 가능한 것이다.

 

2) ActiveX DLL 작성하기

ActiveX DLL을 이용한 간단한 예제를 만들어보자. ActiveX DLL의 기본 생성은 클래스만 나타난다. 이를 활용하여 DLL을 만들어 다른 프로그램에서 사용할 수 있지만 이번에 구현하고자 예제는 눈으로 쉽게 확인할 수 있도록 폼을 포함하여 구현하도록 하겠다.

① SimpleDLL 프로젝트

비주얼 베이직을 실행한 뒤 새 프로젝트 메뉴에서 ActiveX DLL을 선택하자. ActiveX DLL 프로젝트가 시작되면 다음과 같이 클래스 모듈이 하나 등록될 것이다.

[그림 2-1] ActiveX DLL 프로젝트 시작

앞서 이야기한바와 같이 폼을 포함하는 프로젝트 구성을 위해 메뉴에서 새로운 폼을 추가하고 다음과 같이 폼 디자인을 변경하자.

● frmSimpleDLL - 폼 파일이며 Caption을 ActiveX DLL 이용하기로 변경하자.

● cmdMsgbox - 커맨드 버튼 컨트롤이며 Caption을 ActiveX DLL을 이용한 간단 메시지로 변경하자.

[그림 2-2] 폼 디자인 변경

폼 디자인이 완료되면 frmSimpleDLL.frm 파일의 코드 입력창을 열어 다음과 같은 간단한 코드를 입력하자.

● frmSimpleDLL.frm


--------------------------------------------------------------------------------
Private Sub cmdMsgbox_Click()
  MsgBox "간단한 ActiveX DLL 예제"

End Sub


--------------------------------------------------------------------------------

SimpleDLL 프로젝트의 외형을 모두 갖추었다. 그러면 지금부터 DLL 파일을 만들기 위한 클래스 모듈의 코드를 작성하여 보자. 클래스 모듈의 이름을 SimpleDLL로 변경한 후 다음의 코드를 입력하자.

● SimpleDLL.cls


--------------------------------------------------------------------------------
Public Sub ShowSimpleForm()

  Dim TempForm As frmSimpleDLL

  Set TempForm = New frmSimpleDLL

  TempForm.Visible = True

End Sub

--------------------------------------------------------------------------------

이것으로 ActiveX DLL을 하나의 컴포넌트로 제작하는 과정을 완료하였다. 프로젝트를 저장한 뒤 파일 메뉴에 있는 SimpleDLL.dll 만들기를 통해 dll 파일을 생성하도록 하자.

[그림 2-3] SimpleDLL.dll 파일 생성

② 클라이언트 프로그램 만들기

앞에서 간단한 ActiveX DLL 프로그램을 제작하였다. ActiveX DLL은 앞서 설명한 것과 같이 다른 프로그램에서 호출하여 하나의 컴포넌트로 사용이 가능하다고 하였다. DLL의 특성상 독립적으로 실행될 수 없으므로 항상 이와 같은 클라이언트 프로그램을 만들어 주어야만 한다. 지금부터 앞서 제작한 SimpleDLL.dll을 이용하는 간단한 클라이언트 프로그램을 만들어 보도록 하자.

표준 EXE로 새로운 프로젝트를 하나 만들자. 생성된 프로젝트의 폼을 frmClient로 변경한 다음 커맨드 버튼을 추가하여 다음과 같이 폼 디자인을 하도록 하자.

● frmClient - 폼 파일이며 Caption을 'ActiveX DLL 클라이언트'로 변경하자.

● cmdOpenDLL - 커맨드 버튼이며 Caption을 'ActiveX DLL 호출하기'로 변경하자.

[그림 2-4] frmClient 폼 디자인 완료

앞서 작성한 SimpleDLL.dll을 사용하기 위해서 프로젝트 메뉴에 있는 참조를 선택한 후 SimpleDLL을 찾아서 선택하도록 하자. 이런 과정을 거쳐야 SimpleDLL의 컴포넌트를 사용할 수 있다.

[그림 2-5] SimpleDLL 참조선택

간단하게 완성된 폼에서 지금부터 앞서 만들었던 SimpleDLL.dll을 사용하여 보기로 하자. 코드 윈도우를 열고 다음과 같은 코드를 입력하자.

● frmClient.frm


--------------------------------------------------------------------------------
Dim MyDLL As SimpleDLL ' SimpleDLL의 참조변수 선언

 

Private Sub cmdOpenDLL_Click()

  MyDLL.ShowSimpleForm ' SimpleDLL에 선언된 ShowSimpleForm 호출

End Sub

 

Private Sub Form_Load()

  Set MyDLL = New SimpleDLL ' MyDLL 변수에 SimpleDLL 객체 생성

End Sub


--------------------------------------------------------------------------------

 

위와 같은 절차를 거친 후 클라이언트 프로그램을 실행하여 보자. 커맨드 버튼을 클릭하여 SimpleDLL.dll에 있는 ShowSimpleForm 메서드가 실행되어 새로운 폼이 하나 나타나며, 폼에 있는 버튼을 클릭하면 메시지 박스가 출력되는 모습을 볼 수 있을 것이다.