扫一扫
分享文章到微信
扫一扫
关注官方公众号
至顶头条
作者:Swigart Consulting LLC. 的 Scott Swigart
Visual Basic 6 可通过“App.LogEvent”写入事件日志。但是,此 API 有许多严格的限制。首先,不能为事件定义来源(在事件查看器中始终显示为“VBRuntime”),而且不能指定事件 ID 或事件类别。还限制您只能写入应用程序事件日志,不能创建自己的自定义来源和日志。
通过使用 .NET Framework 免费提供的类,可以克服所有这些限制,这样可以使您有效地编写应用程序,以便用户、管理员或其他支持人员都可以查看日志来诊断问题。
.NET Framework 提供了一个强大的 EventLog 类,用它可以轻松地处理事件日志。不过您不能直接从 VB6 访问此类,依照 VB Fusion(英文)系列文章中的精神,可以通过创建封装 .NET 类的 COM 包装从 VB6 中访问此功能。
我还创建了一个练习此事件日志功能的示例 VB6 应用程序。
图 1:使用事件日志功能的 VB6 应用程序
创建包装类时,大部分工作只是将 .NET 类型转换为 VB6 可以理解的类型。GetEventLogs 方法通常返回一组 EventLog 对象,不过不能直接从 VB6 中使用这些 EventLog 对象。但是,下列 VB.NET 函数将计算机上的所有事件日志的列表转换为一组字符串,VB6 很容易就可以使用这些字符串。通常,您拥有系统事件日志、安全性事件日志和应用程序事件日志,但是某些应用程序还会创建自己的自定义事件日志,而此方法还可以显示这些事件日志:
清单 1:使用 VB.NET 列出计算机上的所有事件日志
Public Function GetEventLogs() As String() Dim logs(EventLog.GetEventLogs.Length - 1) As String Dim i As Integer = 0 For Each el As EventLog In EventLog.GetEventLogs() logs(i) = el.Log i += 1 Next Return logs End Function
您可以看到,EventLog 类使您能够通过 GetEventLogs 函数访问所有事件日志。调用此函数后,它就会遍历结果,并将所有事件日志名称转换为一组字符串。然后,可以将此 VB.NET 代码作为 COM 对象进行公开,从而允许从 VB6 中调用它。
从 VB6 中调用此代码以及(例如)用结果填充列表框就像下面这样简单:
清单 2:使用 VB6 在列表框中显示日志名称
Dim eventLog As NetFrameworkWrappers.EventLogWrapper Set eventLog = New NetFrameworkWrappers.EventLogWrapper lstEventLogs.Clear Dim logs() As String logs = eventLog.GetEventLogs Dim log As Variant For Each log In logs lstEventLogs.AddItem log Next
如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。
现场直击|2021世界人工智能大会
直击5G创新地带,就在2021MWC上海
5G已至 转型当时——服务提供商如何把握转型的绝佳时机
寻找自己的Flag
华为开发者大会2020(Cloud)- 科技行者