비즈니스 로직을 수행하기 위해 VB6 ActiveX DLL을 사용하는 기존 클래식 ASP 응용 프로그램을 상속 받았습니다.VB6 ActiveX DLL에서 DLL로드/언로드 이벤트를 가로채는 방법은 무엇입니까?
DLL로드 및 언로드 지점을 추적하고 싶습니다. VB6 DLL에서 이러한 이벤트를 가로 챌 수있는 방법이 있습니까?
관련 메모에서 Class_Terminate 이벤트는 포함 된 DLL이 언로드 될 때 항상 실행해야합니까?
비즈니스 로직을 수행하기 위해 VB6 ActiveX DLL을 사용하는 기존 클래식 ASP 응용 프로그램을 상속 받았습니다.VB6 ActiveX DLL에서 DLL로드/언로드 이벤트를 가로채는 방법은 무엇입니까?
DLL로드 및 언로드 지점을 추적하고 싶습니다. VB6 DLL에서 이러한 이벤트를 가로 챌 수있는 방법이 있습니까?
관련 메모에서 Class_Terminate 이벤트는 포함 된 DLL이 언로드 될 때 항상 실행해야합니까?
시작 개체로 Sub Main을 사용하십시오.
는 그런 다음이 클래스는 내가 만든 테스트 클래스는이
Option Explicit
Public Description As String
Public Sub Test()
MsgBox "test"
End Sub
내가 더와 양식을하지 않습니다
Option Explicit
Private Sub Class_Terminate()
MsgBox "I terminated"
End Sub
처럼 보이는이
Option Explicit
Private TerminateDetect As Terminate
Public Sub Main()
Set TerminateDetect = New Terminate
MsgBox "Setup"
End Sub
같은 모듈을 종료합니다 이 같은 참조는
Option Explicit
Private O As Object
Private Sub Command1_Click()
Set O = CreateObject("TestUnload.Dummy")
O.Test
End Sub
Private Sub Command2_Click()
Set O = Nothing
End Sub
Command1을 클릭하면 DLL을로드하기위한 두 개의 메시지와 Test를 실행하기위한 두 개의 메시지가 표시됩니다. 그런 다음 Command2를 클릭합니다.
이 예는 다소 조잡합니다. 요점을 얻으시기 바랍니다.
요약 보유하고있는 모든 ActiveX에 TDLLManagement Class를 만듭니다. 초기화 코드를 Class_Initialize에두고 종료 코드를 Class_Terminate에 넣으십시오. 그런 다음 Sub Main에서 해당 클래스의 인스턴스를 만들고 개인 모듈 변수에 할당합니다. GlobalMultisuse 클래스가 있고 ActiveX DLL을 직접 참조하면 간단한 테스트를 통해 DLL이로드되는 위치를 확인하십시오.
기존 VB6 추가 기능 vbAdvance을 사용하면 DLLMain에 코드를 추가 할 수 있으므로 DLL에 대한 시작 알림 및 teardown 알림이 제공됩니다. EDIT :이 DLL을 사용하면 표준 DLL이어야하며 COM (ActiveX) DLL이 될 수 없습니다. 경고의 말씀 - don't do anything too scary in DLLMain.
내가 아는 한 Class_Terminate는 응용 프로그램의 비정상적인 종료 (예 : End 사용)를 제외하고는 포함 DLL이 언로드되기 전에 항상 실행되어야합니다.
VB에서 dll이 언로드 된 경우 ASP에서이 작업이 제대로 처리되지 않으면 문제가 발생합니다. dll은 "메모리에 보유"플래그 ("무인 실행")와 함께 컴파일해야합니다.
Sub Main을 사용하여로드를 감지 할 수 있습니다.
VB6 ActiveX DLL에 대한 소스 코드가 있습니까? –
예, 소스 코드가 있습니다. – dommer
이것을 탐지하는 동기는 무엇입니까? 업그레이드 중입니까? – AnthonyWJones