![]() |
Fehler: Ein ausgehender Aufruf kann nicht ausgeführt werden...
Hallo,
ich hab eine kleines Problem, das vermutlich mit Threads zusammen hängt. Ich verwende MadExcept um einen Bugreport zu erzeugen. Dieser BugReport soll automatisch an einen WebService geschickt werden, was über eine externe Komponente geschieht, die als Com Object eingebunden ist. Das Registrieren des Handlers sieht folgendermaßen aus:
Delphi-Quellcode:
Mit stTrySyncCallAlways sollte sichergestellt sein, dass der Handler immer aufgerufen wird und falls möglich im MainThread.
begin
Application.Initialize; RegisterExceptionHandler(SendBugReportByService, stTrySyncCallAlways, epCompleteReport); RegisterExceptActionHandler(WaitForSendBugReportByService, stDontSync); ... end; Hier kurz noch die Optionen, die möglich sind mit einer kurzen Beschreibung Zitat:
Zitat:
Delphi-Quellcode:
class procedure TServiceSupport.SendFile(AFile, ADescription: string);
var support: _Support; supportResult: string; begin support := CoSupport.Create; ... end;
Delphi-Quellcode:
Ich vermute, dass das irgendwie damit zusammenhängt, dass ich mich nicht mehr im MainThread befinde. Kann man da irgendwas machen, dass ich dennoch das ComObject erzeugen und aufrufen kann?
class function CoSupport.Create: _Support;
begin Result := CreateComObject(CLASS_Support) as _Support; end; |
AW: Fehler: Ein ausgehender Aufruf kann nicht ausgeführt werden...
Scheinbar hab ich das Problem gelöst, wobei es noch nicht vollständig ausgetestet ist. Sieht aber erst einmal gut aus.
Als Sync-Option verwende ich jetzt stDontSync In der Methode, in der ich die COM-Operationen durchführe hab ich außerdem CoInitialize(nil) eingefügt
Delphi-Quellcode:
Damit sollte das Ganze dann also grundsätzlich in einem anderen Thread laufen. Mal sehen, auf welche Probleme ich dann damit stoße.class procedure TServiceSupport.SendFile(AFile, ADescription: string); var support: _Support; supportResult: string; begin try CoInitialize(nil); support := CoSupport.Create; ... support.Dispose; support := nil; CoUninitialize; except on E: Exception do begin OutputDebugString(PChar(E.Message)); end; end; end; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 23:23 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz