我正在开发一个用 Delphi 编写的浏览器帮助程序对象,当安装 BHO 并关闭 IE 时,我收到错误“<地址>处的运行时错误 216”。我怀疑这可能是由于以下代码中的 253 disID (onquit) 情况造成的:
function TIEM.Invoke(DispID: Integer; const IID: TGUID; LocaleID: Integer;
Flags: Word; var Params; VarResult, ExcepInfo, ArgErr: Pointer): HResult;
type
POleVariant=^OleVariant;
var
dps:TDispParams absolute Params;
bHasParams:Boolean;
pDispIDs:PDispIDList;
iDispIDsSize:Integer;
begin
Result:=DISP_E_MEMBERNOTFOUND;
pDispIDs:=nil;
iDispIDsSize:=0;
bHasParams:=(dps.cArgs>0);
if(bHasParams)then
begin
iDispIDsSize:=dps.cArgs*SizeOf(TDispID);
GetMem(pDispIDs,iDispIDsSize);
end;
try
if(bHasParams)then BuildPositionalDispIDs(pDispIDs,dps);
case DispID of
104:begin
Result:=S_OK;
end;
250:begin
DoBeforeNavigate2(IDispatch(dps.rgvarg^[pDispIDs^[0]].dispVal),
POleVariant(dps.rgvarg^[pDispIDs^[1]].pvarVal)^,
POleVariant(dps.rgvarg^[pDispIDs^[2]].pvarVal)^,
POleVariant(dps.rgvarg^[pDispIDs^[3]].pvarVal)^,
POleVariant(dps.rgvarg^[pDispIDs^[4]].pvarVal)^,
POleVariant(dps.rgvarg^[pDispIDs^[5]].pvarVal)^,
dps.rgvarg^[pDispIDs^[6]].pbool^);
Result:=S_OK;
end;
252:
begin
DoNavigateComplete2(IDispatch(dps.rgvarg^[pDispIds^[0]].dispval), POleVariant(dps.rgvarg^[pDispIds^[1]].pvarval)^);
Result := S_OK;
end;
259:
begin
DoDocumentComplete(IDispatch(dps.rgvarg^[pDispIds^[0]].dispval), POleVariant(dps.rgvarg^[pDispIds^[1]].pvarval)^);
Result := S_OK;
end;
253:
begin
Result := S_OK;
end;
else
Result := DISP_E_MEMBERNOTFOUND;
end;
finally
if(bHasParams)then
FreeMem(pDispIDs,iDispIDsSize);
end;
end;
但我不确定,也找不到任何相关信息。我正在使用从 an example on Hack China 获得的库创建BHO,我发现了一些project on Google Code在 253 案例中使用 IConnectionPoint.Unadvise(Integer)
。我尝试过,但仍然得到相同的运行时错误 216。我还尝试向上述代码添加异常处理程序,但它没有捕获任何内容。
我添加:
finalization
exit;
现在我没有看到运行时错误。我不知道 BHO 会需要这个。
最佳答案
退出应用时出现 216 错误意味着您在 sysutils 单元完成之后项目的最终确定代码中触发了访问冲突。
因此,请检查所有终结部分是否使用了无效指针。在您的搜索中包括您在项目中使用的所有组件的最终确定部分。
要调试终结部分,您可以在 dpr 中的“end”语句上放置一个断点,当调试器在此中断时,使用 F7 单步执行终结代码,然后使用 F7 和 F8 单步执行所有终结部分。这将是一个乏味的过程,但它会让您找到导致访问冲突的确切语句。
关于windows - 使用 BHO 时 IE 上的运行时错误 216,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4702658/