我继承了一个使用VB6 ActiveX DLL执行业务逻辑的传统应用程序。
我想跟踪加载和卸载DLL的时间点。有没有办法在VB6动态链接库中拦截这些事件?
需要注意的是,Class_Terminate事件应该总是在包含它们的DLL卸载时运行吗?
发布于 2009-11-19 04:27:41
使用Sub Main作为启动对象。
创建一个这样的模块
Option Explicit
Private TerminateDetect As Terminate
Public Sub Main()
Set TerminateDetect = New Terminate
MsgBox "Setup"
End Sub那么你的terminate类看起来像这样
Option Explicit
Private Sub Class_Terminate()
MsgBox "I terminated"
End Sub我做的一个测试类是这样的
Option Explicit
Public Description As String
Public Sub Test()
MsgBox "test"
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时,我得到两条消息,一条是加载动态链接库,另一条是运行测试。然后当我点击Command2时。
这个例子相当粗糙,所以我希望你能明白这一点。
摘要在您拥有的每个ActiveX中创建一个TDLLManagement类。将初始化代码放在Class_Initialize中,将终止代码放在Class_Terminate中。然后,让Sub Main创建该类的实例,并将其分配给私有模块变量。注如果您有任何GlobalMultisuse类,并且直接引用了ActiveX动态链接库,则需要进行简单的测试,以查看该动态链接库加载的位置。
发布于 2009-11-19 21:51:59
如果VB dll被卸载,ASP中就会发生不好的事情,因为它不能很好地处理这个概念。编译dll时,应启用“保留在内存中”标志(以及“无人值守执行”)。
您可以使用Sub Main来检测加载。
发布于 2009-11-18 17:11:25
经典的VB6插件vbAdvance允许您向DLLMain中添加代码,从而获得DLL的启动和拆卸通知。DLL EDIT:很遗憾,如果你使用它,你的必须是一个标准的动态链接库,它不能是一个COM (ActiveX)动态链接库。一句警告-- don't do anything too scary in DLLMain。
据我所知,Class_Terminate应该总是在包含DLL的卸载之前运行,除非在应用程序异常终止的情况下(例如使用End)。
https://stackoverflow.com/questions/1754457
复制相似问题