Ich arbeite an einem Browser-Hilfsobjekt in Delphi geschrieben, und wenn das BHO installiert ist und ich IE schließe, erhalte ich den Fehler "Laufzeitfehler 216 bei < Adresse>". Ich vermute, dass dies wegen des 253 disID (OnQuit) Falles auf dem folgenden Code sein könnte:Laufzeitfehler 216 auf IE bei Verwendung von BHO
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;
Aber ich bin nicht sicher, und ich konnte keine Informationen darüber finden. Ich verwende eine Bibliothek, die ich von an example on Hack China erhielt, um das BHO zu erstellen, und ich fand einige project on Google Code, die IConnectionPoint.Unadvise(Integer)
auf dem 253 Fall verwendet. Ich habe das versucht, aber immer noch den gleichen Laufzeitfehler 216. Ich habe auch versucht, einen Ausnahme-Handler zu dem obigen Code hinzuzufügen, aber es hat nichts gefangen.
ich hinzugefügt:
finalization
exit;
Und jetzt sehe ich nicht, die Laufzeitfehler. Ich wusste nicht, dass das BHO das brauchen würde.
geben Sie uns den richtigen Link. –
@Worm, als ein neuer Benutzer ohne Ruf, kann er wahrscheinlich * Ihnen keine richtige Verbindung geben; neuen Benutzern ist nur ein Link erlaubt. –