首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何截取VB6 ActiveX DLL中的DLL加载/卸载事件?

如何截取VB6 ActiveX DLL中的DLL加载/卸载事件?
EN

Stack Overflow用户
提问于 2009-11-18 16:30:00
回答 3查看 2.2K关注 0票数 2

我继承了一个使用VB6 ActiveX DLL执行业务逻辑的传统应用程序。

我想跟踪加载和卸载DLL的时间点。有没有办法在VB6动态链接库中拦截这些事件?

需要注意的是,Class_Terminate事件应该总是在包含它们的DLL卸载时运行吗?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2009-11-19 04:27:41

使用Sub Main作为启动对象。

创建一个这样的模块

代码语言:javascript
复制
Option Explicit

Private TerminateDetect As Terminate

Public Sub Main()
    Set TerminateDetect = New Terminate
    MsgBox "Setup"
End Sub

那么你的terminate类看起来像这样

代码语言:javascript
复制
Option Explicit

Private Sub Class_Terminate()
    MsgBox "I terminated"
End Sub

我做的一个测试类是这样的

代码语言:javascript
复制
Option Explicit

Public Description As String

Public Sub Test()
    MsgBox "test"
End Sub

我制作了一个没有引用的表单,如下所示

代码语言:javascript
复制
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动态链接库,则需要进行简单的测试,以查看该动态链接库加载的位置。

票数 2
EN

Stack Overflow用户

发布于 2009-11-19 21:51:59

如果VB dll被卸载,ASP中就会发生不好的事情,因为它不能很好地处理这个概念。编译dll时,应启用“保留在内存中”标志(以及“无人值守执行”)。

您可以使用Sub Main来检测加载。

票数 1
EN

Stack Overflow用户

发布于 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)。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1754457

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档