Das EIdWinsockStubError.Build klingt ja schonmal nach 'ner Fehlermöglichkeit im Umfeld der Sockets.
Runtimeerror 216 läßt (in der Regel) darauf schließen, dass was nach seiner Freigabe noch genutzt wurde.
Prüf' bitte mal, wo und in welcher Reihenfolge Du (
Indy)Komponenten erstellst und wieder freigibst. Eventuell hakt da was.
Der Fehler scheint letztlich irgendwo vor dem EIdWinsockStubError.Build aufzutreten. Du müsstest jetzt quasi rückwärts debuggen können. Da das nicht geht versuche mal irgendwie die letzten Schritte vorher zu loggen.
Eventuell beschreibst Du uns mal kurz die letzten Programmschritte vor dem Fehler.
Also z. B.: Fehler tritt nur beim Programmende auf.
Fehler tritt in 'nem Timerereignis auf ...
Werden die
Indy-Komponenten einmalig erstellt (z. B. sind auf ein Formular gepappt) oder werden sie je nach Bedarf erstellt und anschließend freigegeben?
Findest Du EIdWinsockStubError.Build in der MAP-Datei?
Wenn ja: Davor steht eine Adresse in der Art: 0001:001877A4
Suche bei laufendem Debugger bitte mal nach dieser Adresse: 001877A4 und versuche dann im Quelltext rückwärts zu gehen, bis Du einen möglichen Auslöser dieser
Exception findest.
Definiert ist das Teil in der
Unit IdWinsock2.
Welche SSL-Methode Du nehmen musst, kannst Du eventuell mit ('ner abgewandelten Version) des folgenden Quelltextes erfahren:
Delphi-Quellcode:
function MyGetSSLMethod(http: tidHTTP; SSL : TIdSSLIOHandlerSocketOpenSSL; sUrl:
string;
var sMessage:
string): Integer;
var
sMethod:
string;
myIdSSLVersion: TIdSSLVersion;
begin
Result := -1;
for myIdSSLVersion := Low(TIdSSLVersion)
to High(TIdSSLVersion)
do begin
SSL.SSLOptions.Method := myIdSSLVersion;
sMethod := GetEnumName(TypeInfo(TIdSSLVersion), Ord(myIdSSLVersion));
try
http.RedirectMaximum := 0;
http.HandleRedirects := false;
http.Response.Clear;
http.Get(sUrl);
http.Disconnect(True);
http.IOHandler.InputBuffer.Clear;
sMessage := sMethod;
Result := Ord(myIdSSLVersion);
break;
except
on e:
Exception do begin
case http.ResponseCode
of
301, 302 :
begin
sMessage := sMessage + #13 + http.ResponseText;
end;
else
sMessage := sMessage + #13 + AnsiReplaceText(e.
Message, #13#10, '
');
end;
PSReg.WriteAppLog(Format('
Scriptaufruf : GetSSLMethod(%s)', [sUrl]));
PSReg.WriteAppLog(Format('
Fehlermeldung: %s', [AnsiReplaceText(e.
Message, #13#10, '
')]));
PSReg.WriteAppLog(Format('
SSLMethod : %s', [sMethod]));
http.Disconnect(True);
http.IOHandler.InputBuffer.Clear;
end;
end;
end;
end;