본문 바로가기
IT-개발,DB

[개발] ASP에서 ActiveX DLL 사용하기

by SB리치퍼슨 2010. 11. 4.

ASP에서 ActiveX DLL 사용하기

 

출처:http://www.neovis.pe.kr/


■ ActiveX DLL 프로그래밍하기

3.3 ASP에서 ActiveX DLL 사용하기

비주얼 베이직에서 만든 ActiveX DLL 컴포넌트를 ASP에서 사용하여 보자. 처음에는 간단한 덧셈 연산을 수행하는 컴포넌트 제작 과정에 대해 알아볼 것이며, 이후에는 ASP 소스에 직접 사용할 수 있는 컴포넌트 제작에 대해서 알아보겠다.

1) 덧셈 컴포넌트 만들기

두 개의 수를 입력하면 덧셈을 수행하는 컴포넌트를 만들어보자. 우선 ActiveX DLL 프로젝트를 새롭게 만든 다음 프로젝트의 이름과 클래스 모듈의 이름을 prjCalc와 Calc로 변경하자. 프로젝트의 이름과 클래스의 이름은 이후에 컴포넌트를 생성하는 기준이 되는 이름이 되므로 주의하여야 한다.

이름의 변경이 정상적으로 완료되면 클래스 모듈의 코드 입력창에 다음과 같은 코드를 입력하도록 하자.

● Calc.cls


Option Explicit

Dim Result As Integer
Dim Num1 As Integer
Dim Num2 As Integer

Public Property Let aNum1(ByVal rNum As Integer)

Num1 = rNum

End Property

Public Property Let aNum2(ByVal rNum As Integer)

Num2 = rNum

End Property

Public Sub SumCalc()

Result = Num1 + Num2

End Sub

Public Property Get SumResult()

SumResult = Result

End Property


위의 Calc클래스는 연산에 필요한 입력값과 계산을 수행하는 메서드, 계산된 결과값을 나타내어주는 3 부분으로 이루어져 있다. 우선 입력값을 클래스로 가져오는 속성 선언 부분을 살펴보자.


Public Property Let aNum1(ByVal rNum As Integer)

Num1 = rNum

End Property


추후 객체를 생성하는 부분에서 aNum1이르는 속성 값으로 숫자를 입력하면 Num1에 저장하여 계산에 사용할 수 있게 하는 부분이다. Property Let으로 선언하여 외부에서 클래스로 받아오는 속성임을 나타내게 되는 것이다.


Public Sub SumCalc()

Result = Num1 + Num2

End Sub


SumCalc 메서드는 입력된 Num1과 Num2를 더하여 Result 변수에 저장하는 메서드가 된다.


Public Property Get SumResult()

SumResult = Result

End Property


SumResult는 계산된 결과값을 Property Get으로 선언하여 클래스에서 외부로 보내는 속성을 나타낸다. 실제 ASP에서는 SumResult를 통하여 결과값을 통보 받게 되는 것이다.

2) 컴포넌트 활용 ASP 파일 만들기

컴포넌트를 이용하는 ASP 파일을 만들어보자. ASP를 조금이라도 다루어본 개발자라면 쉽게 이해 가는 아주 간단한 예제이다. 마이크로소프트 비주얼 인터데브나 다른 텍스트 에디터에서 다음처럼 ASP 파일을 하나 생성하자.

● SumCalc.asp


<%@ Language=VBScript %>

<%

Dim objSumCalc, Num1, Num2

Num1 = Request("Num1")
Num2 = Request("Num2")

Set objSumCalc = Server.CreateObject("prjCalc.Calc")

objSumCalc.aNum1 = Num1
objSumCalc.aNum2 = Num2

objSumCalc.SumCalc()

%>

<HTML>
<HEAD>
<TITLE>ActiveX DLL 컴포넌트 활용하기 </TITLE>
</HEAD>

<BODY>

<P>입력하신 숫자의 <%=Num1%>, <%=Num2%>의 합은 <%=objSumCalc.SumResult%> 입니다.</P>

</BODY>

</HTML>


ASP 소스코드를 살펴보자. ASP에서 데이터베이스 연결을 하여 작업을 수행해본 경험이 있다면 쉽게 이해할 수 있을 코드가 되겠다. 가장 먼저 변수가 선언되어 있다. ASP에서는 비주얼 베이직과는 달리 항상 변수를 선언하거나 형식을 지정해야 할 필요는 없다.


Num1 = Request("Num1")
Num2 = Request("Num2")

SumCalc.asp파일로 Get방식이나 Post방식으로 전송되어지는 두 개의 값을 새로운 변수에 저장하는 부분이다. Request 객체를 이용하여 넘어온 값을 새로운 변수에 저장한다.


Set objSumCalc = Server.CreateObject("prjCalc.Calc")

비주얼 베이직의 표준 EXE에서의 객체 생성과 유사한 형식을 가지고 있지만 ASP는 웹 서버에서 동작하므로 서버 객체를 생성하는 Server.CreateObject라는 구문을 가지게 되는 것이다. objSumCalc에 새로운 서버 객체인 prjCalc(프로젝트명).Calc(클래스명)가 할당된다. 이렇게 서버 객체가 생성되기 위해서는 반드시 앞서 만든 DLL 파일이 웹 서버에 우선 등록되어야 할 것이다.


[참고하세요]

서버 객체 등록 : 서버에서 생성할 수 있는 객체를 등록하고자 반드시 서버의 레지스트리에 등록이 되어야 한다. 비주얼 베이직에서 컴파일을 수행하면 자동으로 등록되지만 그렇지 못 할 경우에는 regsvr32 명령을 이용하여 등록할 수도 있다. 명령 프롬프트 창에서 등록하고자 하는 dll파일이 있는 곳으로 이동한 다음 [regsvr32 dll파일명]을 입력하면 성공적으로 등록되었다는 메시지가 나올 것이다. 등록되어 있는 dll을 삭제하고자 할 경우에는 /u 옵션을 사용하여 [regsvr32 /u dll파일명]과 같이 입력하면 된다.




objSumCalc.aNum1 = Num1
objSumCalc.aNum2 = Num2
objSumCalc.SumCalc()

앞서 생성한 객체의 속성에 값을 입력하고, 메서드를 실행하는 부분이다. DLL 파일에서 두 가지의 입력값으로 덧셈 연산을 수행하므로 Num1과 Num2에 ASP로 전달되어진 입력값을 할당한 뒤 SumCalc() 메서드를 이용하여 덧셈 연산이 수행된다.


<%=objSumCalc.SumResult%>

앞의 과정으로 연산작업이 완료되면 결과값을 SumResult라는 속성으로부터 가져오는 부분이다.

이렇게 만든 ASP 파일을 IIS에서 접근이 가능한 디렉토리로 복사하자. 이제 실행하면 될 것이다. 단 하나 주의할 점은 Num1과 Num2에 덧셈을 할 값들을 입력하여야 한다는 것이다. 이번 예제는 간단하므로 주소를 입력할 때 Get 방식을 통한 변수값 입력을 하면 될 것이다. 따라서 서버에서 SumCalc.asp 파일을 접근할 때 Num1과 Num2의 값을 다음과 같이 입력하도록 하자. [http://localhost/접근주소/SumCalc.asp?Num1=3&Num2=2] 이렇게 입력한 결과값은 다음과 같이 출력될 것이다. Num1과 Num2의 값을 변경하여 가면서 여러번 결과값을 확인하여 보자.


[그림 4-1] SumCalc.asp 결과 화면


[참고하세요]

앞의 서버 컴포넌트 등록과정이 비주얼 베이직에서는 불편할 수도 있다. 그래서 비주얼 베이직에서는 디버깅 모드를 제공하고 있다. asp 파일을 완성한 뒤 서버에게 접근이 가능한 경로로 이동해 놓으면 서버 컴포넌트를 등록하지 않아도 실행된 결과를 확인할 수 있는 것이다. 컴포넌트를 제작하는 과정에서는 이와 같은 디버깅 모드를 활용하면 오류 수정에 용이할 것이다.

비주얼 베이직의 프로젝트 메뉴에서 프로젝트 속성 창을 실행한 후 디버깅 탭을 선택하자. 프로젝트를 시작할 때 항목을 URL을 사용한 브라우저 시작으로 변경하고 앞의 서버 접근 주소를 동일하게 입력한 후 프로젝트를 실행하여 보자. 웹 브라우저가 실행되면서 앞의 결과와 같은 동일한 결과화면을 볼 수 있을 것이다.

[그림 4-2] 디버깅 속성 변경




[주의하세요]

윈도우 2000에서의 비주얼 베이직 디버깅모드 사용법

윈도우 2000을 사용하는 개발자들이 비주얼 베이직과 ASP를 연동하여 컴포넌트 제작을 할 때 가장 많이 오류가 발생하는 것이 Server.CreateObject 오류이다. 이것은 윈도우 2000의 COM+에서의 지원이 올바르지 못해 발생하므로 다음과 같이 컴포넌트 작업을 수행하는 시스템의 설정을 변경하여야 한다.

1) 레지스트리 변경

DCOM에서의 VB ASP 디버깅을 수행하기 위한 레지스트리를 생성하여야 한다. 메모장에서 다음과 같이 입력한 후 Vbaspdbg.reg 파일의 이름으로 저장하자.


REGEDIT4

[HKEY_CLASSES_ROOT\CLSID\{70F214BA-94E2-4bdf-8F30-32CB4A905E4D}]
@="VB ASP Debugging"

[HKEY_CLASSES_ROOT\CLSID\{70F214BA-94E2-4bdf-8F30-32CB4A905E4D}\LocalServer32]
@="vb6.exe"

[HKEY_CLASSES_ROOT\AppID\vb6.exe]
"AppId"="{70F214BA-94E2-4bdf-8F30-32CB4A905E4D}"



[그림 4-3] Vbaspdbg.reg 파일 생성

Vbaspdbg.reg 파일의 저장이 완료되면 이 파일을 실행하여 레지스트리 항목으로 추가시키자.

[그림 4-4] Vbaspdbg.reg 파일 레지스트리 등록

2) DCOM 권한변경

DCOM 구성 등록 정보에서의 권한변경을 수행하여야 한다. 다음의 순서대로 따라하자.

① 윈도우의 실행창에서 dcomcnfg를 입력하여 DCOM 구성 등록 정보 창을 실행하자.


[그림 4-5] DCOM 구성 등록 정보 실행

② DCOM 구성 등록 정보 창에서 응용 프로그램 탭을 선택한 다음 VB ASP Debugging 항목을 선택하자.

[그림 4-6] VB ASP Debugging 항목 선택

③ VB ASP Debugging 항목의 등록 정보를 실행하자. 등록 정보 창에서 보안 탭을 선택한 후 사용자 정의 액세스 권한으로 선택항목을 변경하자.


[그림 4-7] 보안 등록정보 변경

④ 사용자 정의 액세스 권한의 편집 버튼을 눌러 나온 사용 권한 창에서 추가를 선택하고, 사용자 및 그룹 추가에서 Everyone 항목을 추가하자.


[그림 4-8] 사용자 추가

⑤ 확인 버튼을 클릭하여 변경된 등록 정보를 저장하자.

3) 가상 디렉토리 권한 변경

실제 비주얼 베이직의 컴포넌트를 이용하는 ASP 파일이 위치하게 될 가상 디렉토리의 권한과 설정의 변경 작업을 수행하여 보자.

① 인터넷 서비스 관리자를 실행하여 현재 비주얼 베이직의 컴포넌트를 이용하는 ASP 파일이 위치하는 가상 디렉토리를 선택하자.

[그림 4-9] 인터넷 서비스 관리자 실행

② 가상 디렉토리의 등록정보를 실행한 후 가상 디렉토리 탭에서 응용 프로그램 보호항목에서 높음(격리됨)으로 변경하자.


[그림 4-10] 가상 디렉토리 등록정보 변경

③ 디렉토리 보안 탭을 선택하자. 상단에 있는 익명 액세스 및 인증 제어 항목에서의 편집 버튼을 클릭한 후 익명 액세스 항목의 체크를 해제하고, 기본 인증과 Windows 통합 인증을 체크하자.


[그림 4-11] 가상 디렉토리 보안 등록정보 변경

이렇게 하여 윈도우 2000에서의 비주얼 베이직 디버깅을 사용할 수 있는 방법을 수행하여 보았다. 보다 자세한 정보는 마이크로소프트의 홈페이지를 참고하기 바란다.

(http://support.microsoft.com/support/kb/articles/q259/7/25.asp



출처: http://blog.naver.com/kdllee/70000510255
반응형

댓글