Programm hinterlässt Prozess, obwohl beendet
-
Hallo,
für alle, die es vielleicht interessiert. Ich habe jetzt eine Variante gefunden, bei welcher das Durchsuchen einer Exceldatei in einem eigenen Thread funktioniert.
Das Excel-Objekt wird im Thread initialisiert.
void __fastcall XLSSearch::Execute() { OleCheck(CoInitialize(NULL)); try { FExcel = new TMLExcel; FExcel->OpenWorkbook(MainForm->datapath+FileName); FExcel->CloseExcelOnTerminate = true; FExcel->Books[0]->Saved = true; // damit beim Schließen von Excel kein Speichern-Dialog eingeblendet wird try { ExcelSuche([Parameter]); // hier werden auch Parameter übergeben } catch(Exception &e) { msg = "Fehler beim Start der ExcelSuche():"; Synchronize(WriteMsg); //Eintrag in eine log-Datei msg = e.Message; Synchronize(WriteMsg); //Eintrag in eine log-Datei } } __finally { delete FExcel; FExcel = NULL; CoUninitialize; } } //---------------------------------------------------------------------------Die Funktion, die dem OnTerminate des Threads zugewiesen ist:
void __fastcall XLSSearch::DeleteThread(TObject *Sender) { delete FExcel; FExcel = NULL; CoUninitialize; Flog->Add("Thread beendet."); } //---------------------------------------------------------------------------Sooft ich getestet habe, wurde Excel ordnungsgemäß geschlossen und auch der Prozess jedesmal beendet.