以下链接中提到的全局VB6错误处理程序产品声称“在VBE6调试器中安装一个小回调挂钩”:
http://www.everythingaccess.com/simplyvba/globalerrorhandler/howitworks.htm
我想自己实施这个产品,因为我希望能够更好地控制它正在做什么。上述产品如何实现其目标?
答案 0 :(得分:1)
您正在查看的产品是COM组件。从网站上提供的documentation,听起来COM组件实现了特定的组件类。如果您已经拥有该产品,首先要做的是启动SysInternals procmon
,在DLL上运行regsvr32
,并从创建的注册表项中找出实现的组件类。一旦你知道这一点,MSDN就可以告诉你哪些接口对应于那些组件类。
Microsoft开发了一个名为Active Scripting的框架,允许您托管脚本引擎并注入调试功能。如果假设VB6生成了一个与该框架相关的exe,那么可能能够做到:
IApplicationDebugger
IApplicationDebugger::onHandleBreakPoint
以便能够响应VB代码中的错误onHandleBreakPoint
看起来该产品使用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文章。