AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein OLE-Excel Verbindung schließen: Excel.exe Prozess bleibt bstehen

OLE-Excel Verbindung schließen: Excel.exe Prozess bleibt bstehen

Ein Thema von owow · begonnen am 6. Mär 2012 · letzter Beitrag vom 7. Mär 2012
Antwort Antwort
owow

Registriert seit: 6. Mär 2012
5 Beiträge
 
#1

AW: OLE-Excel Verbindung schließen: Excel.exe Prozess bleibt bstehen

  Alt 6. Mär 2012, 18:08
ein Workaround ist folgendes: eine neue Prozedur erstellen in der alles gemacht wird was voher in btnCreateClick gemacht wurde, diese dann bei btnCreateClick aufrufen


Delphi-Quellcode:
procedure TForm1.create_close;
begin
  try
  try
    ExcelObj:=CreateOleObject('Excel.Application');
    ExcelObj.Visible:= false;
    ExcelObj.DisplayAlerts:=false;
    ExcelObj.UserControl := false;
  except
    on e: exception do
    begin
     ShowMessage(e.Message+#13#10+
      'Kein Excel installiert?');
     exit;
    end;
  end;
 finally
    close_excel;
 end;
 //close_excel;
end;

procedure TForm1.btnCreateClick(Sender: TObject);
begin
 create_close;
 ShowMessage('pause'); //Excel wird nun schon vor dem Klick auf "OK" korrekt beendet
end;

wieso das funktioniert kann ich mir aber noch nicht erklären, habt ihr eine Idee?
  Mit Zitat antworten Zitat
ASM

Registriert seit: 15. Aug 2004
165 Beiträge
 
Delphi 7 Enterprise
 
#2

AW: OLE-Excel Verbindung schließen: Excel.exe Prozess bleibt bstehen

  Alt 6. Mär 2012, 19:03
Excel wird nun schon vor dem Klick auf "OK" korrekt beendet
wieso das funktioniert kann ich mir aber noch nicht erklären, habt ihr eine Idee?
Ich möchte als mir momentan einzig plausible Erklärung vermuten, dass der Referenzzähler auf die Out-of-Process Server-Instanz des COM-Objekts, welches lokal, innerhalb der Prozedur durch späte Bindung erzeugt worden ist, erst beim effektiven Verlassen dieser Prozedur wieder zurückgesetzt wird. Solange aber der Referenzzähler>0 ist, bleibt eben die Server-Instanz (hier: Excel) als Prozess zunächst noch im Speicher erhalten, auch wenn dieses Objekt bereits von Delphi in dessen eigenem Kontext innerhalb der Prozedur auf Unassigned gesetzt worden ist.
  Mit Zitat antworten Zitat
Pitschki1801

Registriert seit: 9. Feb 2012
14 Beiträge
 
Delphi XE Professional
 
#3

AW: OLE-Excel Verbindung schließen: Excel.exe Prozess bleibt bstehen

  Alt 6. Mär 2012, 20:30
Bei mir wurde der Prozess nach dem Ok click beendet.
Mir scheint die Erklärung von ASM ebenfalls recht plausibel zu sein. Wird der Prozess vllt erst mit dem schließen des Programmes freigegeben, wenn du keine Showmessage hast?
  Mit Zitat antworten Zitat
Pitschki1801

Registriert seit: 9. Feb 2012
14 Beiträge
 
Delphi XE Professional
 
#4

AW: OLE-Excel Verbindung schließen: Excel.exe Prozess bleibt bstehen

  Alt 7. Mär 2012, 08:47
Ich hab jetzt nochmal bisschen getestet und kann die Aussage von ASM bestätigen.
Würdest du zum Beispiel den CreateOleObject drei mal, in einer Procedure, aufrufen hättest du auch drei Prozesse bis die Procedure beendet ist, auch wenn du die Objecte bereits unassigned hast.
Daher macht es Sinn, was du ja bereits getan hast, eine Create-Procedure für das Excel zu definieren. Je nachdem was du mit dem Excel-Object noch vor hast, würde ich die Excel-Thematik in eine eigene Unit verschieben und eine Art Handler schaffen.
  Mit Zitat antworten Zitat
Antwort Antwort

Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 15:58 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