如何实现全局VB6错误处理程序?

时间:2012-04-20 05:30:32

标签: vb6 error-handling

以下链接中提到的全局VB6错误处理程序产品声称“在VBE6调试器中安装一个小回调挂钩”:

http://www.everythingaccess.com/simplyvba/globalerrorhandler/howitworks.htm

我想自己实施这个产品,因为我希望能够更好地控制它正在做什么。上述产品如何实现其目标?

1 个答案:

答案 0 :(得分:1)

您正在查看的产品是COM组件。从网站上提供的documentation,听起来COM组件实现了特定的组件类。如果您已经拥有该产品,首先要做的是启动SysInternals procmon,在DLL上运行regsvr32,并从创建的注册表项中找出实现的组件类。一旦你知道这一点,MSDN就可以告诉你哪些接口对应于那些组件类。

Microsoft开发了一个名为Active Scripting的框架,允许您托管脚本引擎并注入调试功能。如果假设VB6生成了一个与该框架相关的exe,那么可能能够做到:

  • 创建实现IApplicationDebugger
  • 的COM组件
  • 实施IApplicationDebugger::onHandleBreakPoint以便能够响应VB代码中的错误
  • 阅读MSDN知识库Q222966,了解如何从onHandleBreakPoint
  • 回拨VB

看起来该产品使用ErrEx注入IActiveScript::AddNamedItem类。要提供相同的行为,请在同一个COM组件上实现IActiveScriptSite::GetItemInfo以返回指向实现与TypeInfo相同接口的COM组件的实例(以及关联的ErrEx的实例)的指针。 。在ErrEx.EnableGlobalErrorHandler的实施中,您将执行以下操作:

  • CoCreateInstance inproc Process Debug Manager
  • IRemoteDebugApplication
  • 的投射引用
  • 使用IApplicationDebugger
  • 注册IRemoteDebugApplication::ConnectDebugger组件的实例

我对调用IActiveScript::AddNamedItem进行了掩饰,因为我不知道你是如何从正在运行的进程中获得指向IActiveScript的指针的。此外,我不知道创建Process Debug Manager的新实例是否有效,或者您是否必须挂钩到现有实例。

我为这个令人困惑的解释,缺少信息以及对流程的大部分内容进行掩饰而道歉,但这已经开始了......

您需要阅读MSDN上的Active Scripting APIs文章。