Delphi VBScript调试器实现-IActiveScriptDebug“;“灾难性故障”;在64位Windows上

Delphi VBScript调试器实现-IActiveScriptDebug“;“灾难性故障”;在64位Windows上,delphi,debugging,vbscript,Delphi,Debugging,Vbscript,下面是我的上一个问题:在64位windows上实现Microsoft Active Script调试器接口。我遇到了另一个棘手的问题 这一次,它与IActiveScriptDebug在64位版本中似乎不起作用 问题代码是在尝试使用MS示例调试器代码(转换为Delphi)中的代码设置断点时出现的 其中,Fengine是IactiveScript语言引擎,FdebugEngine是返回的IActiveScriptDebug对象,edcc是IEnumDebugCodeContext 对于64位窗口,I

下面是我的上一个问题:在64位windows上实现Microsoft Active Script调试器接口。我遇到了另一个棘手的问题

这一次,它与IActiveScriptDebug在64位版本中似乎不起作用

问题代码是在尝试使用MS示例调试器代码(转换为Delphi)中的代码设置断点时出现的

其中,Fengine是IactiveScript语言引擎,FdebugEngine是返回的IActiveScriptDebug对象,edcc是IEnumDebugCodeContext

对于64位窗口,IID_IActiveScriptDebug设置为IID_IActiveScriptDebug64 GUID;对于32位窗口,IID_IActiveScriptDebug32设置为IID_IActiveScriptDebug32。在这两种情况下,都会返回一个有效的调试引擎

为32个窗口编译,此代码运行良好。我可以设置断点并在中断时获取回调

编译为64位,FdebugEngine.EnumCodeContextsOfPosition返回“灾难性故障”Hresult


你知道为什么64位代码会产生这个错误吗?

所以在我追根究底,并且这个论坛没有回应之后,我得出结论,64位版本的Active script debugger已经坏掉了,因为它似乎已被弃用,所以不可能得到修复


因此,我将此作为对任何想要实现此功能的人的警告,并让他们知道不要浪费时间。

您是否获得并传递了这篇(相当古老)文章中第三次出现的EnumcodeContextsPosition中提到的cookie值?@MartynA根据官方MS文档。传递的cookie值为0,这是正确的,这是在IActiveScriptParse::ParseScriptText中设置的。这在32位模式下工作。@MartynA我尝试在链接到的站点上创建一个IDebugDocumentHelper对象,并按照建议的代码执行以获取cookie值,并将其传递给EnumCodeContextsOfPosition函数。同样的结果是“灾难性故障”。我现在有点不知所措,我想你已经猜到了,我不是这方面的专家,所以我能提出的最好建议是你把你的q扩展成a,希望t能引起一个真正的人的注意。
  Href:=FEngine.QueryInterface(IID_IActiveScriptDebug,FdebugEngine);
  Href:=FdebugEngine.EnumCodeContextsOfPosition(0,Line,LineLen,edcc);
  if IEnumDebugCodeContexts(edcc).Next(1,dcc,numFetched) = S_OK then
    Href:=dcc.SetBreakPoint(BREAKPOINT_ENABLED);