Hallo GuaAck,
und Danke, dass Du Dir die Mühe bemacht hast.
Du hast mit Delhi 7 getestet und ich mit D2010: in beiden Fällen funktioniert alles problemlos.
Mittlerweile muss ich sagen: mit XE8 funktioniert es überhaupt nicht, egal welches Windows oder Office.
Die im Speicher zurückbleibenden Excel-Instanzen sind aber offensichtlich "frei", wie folgende Beobachtung zeigt.
Öffnet man den Explorer mit aktivierter Detailansicht und klickt auf ein XLS-File, so wird eine Excel-Instanz vom Explorer gestartet, um die Dateivorschau zu erstellen.
Mit Schliessen des Explorerfensters verschwindet auch die Instanz.
Nun das Interessante:
liegt noch eine meiner hängengebliebenen Instanzen im Speicher, so generiert der Explorer keine neue Excel-Instanz, sondern verwendet meine.
Und noch besser:
Wird der Explorer nun wieder geschlossen, verschwindet auch meine Hängeinstanz.
Die Befehlskette
Delphi-Quelltext
1: 2: 3: 4: 5:
| RangeMatrix := Unassigned; MySheet := Unassigned; XLApp.Workbooks[1].Close(False); XLApp.Quit; XLAPP := Unassigned; |
reicht also nicht, um den Speicher zu bereinigen.
Unter .NET gibt es Aufrufe der GarbageCollection, die dies erledigen.
Aber bei Delphi/XE8 ?
Gruß,
JVS