<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[Programm hinterlässt Prozess, obwohl beendet]]></title><description><![CDATA[<p>Hallo,</p>
<p>meine Frage heute ist, warum mein Programm ein Excel-Prozess im Task-Manager hinterlässt, obwohl ich diesen beendet habe...<br />
und zwar mach ich folgendes:<br />
ich erstelle erstmal ein Excel-Objekt und öffne die Anwendung:</p>
<pre><code class="language-cpp">Variant m_vExcel;
   m_vExcel = CreateOleObject(&quot;Excel.Application&quot;);
    if( bVisible )
    {
      m_vExcel.OlePropertySet(&quot;Visible&quot;,true);
    }
</code></pre>
<p>Nach dem ich meine Arbeit im Excel getan habe, möchte ich Excel schliessen, das mache ich dann so:</p>
<pre><code class="language-cpp">m_vExcel.OleProcedure(&quot;Quit&quot;);
</code></pre>
<p>Jedoch, wenn ich mir den Task-Manager nachher anschaue, ist der EXCEL-Prozess immer noch drin, wenn ich jetzt paar Excel-Sheets öffne und schliesse, weil die Anwendung diese Arbeit verlangt, habe ich ja ne ganze Latte an Excel-Prozessen... <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f61e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--disappointed_face"
      title=":("
      alt="😞"
    /></p>
<p>Weiss jemand Rat für mich, muss ich irgendwie das Handle an Windows zurückübergeben?<br />
Wenn ich Excel nämlich nicht aus der Anwendung heraus schliesse, sondern das Excel selber, bleibt der Excel-Prozess trotzdem im Task-Manager.</p>
<p>Gruss,<br />
chullain</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/170268/programm-hinterlässt-prozess-obwohl-beendet</link><generator>RSS for Node</generator><lastBuildDate>Fri, 14 Aug 2026 15:52:02 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/170268.rss" rel="self" type="application/rss+xml"/><pubDate>Sat, 13 Jan 2007 19:05:10 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Programm hinterlässt Prozess, obwohl beendet on Sat, 13 Jan 2007 19:05:10 GMT]]></title><description><![CDATA[<p>Hallo,</p>
<p>meine Frage heute ist, warum mein Programm ein Excel-Prozess im Task-Manager hinterlässt, obwohl ich diesen beendet habe...<br />
und zwar mach ich folgendes:<br />
ich erstelle erstmal ein Excel-Objekt und öffne die Anwendung:</p>
<pre><code class="language-cpp">Variant m_vExcel;
   m_vExcel = CreateOleObject(&quot;Excel.Application&quot;);
    if( bVisible )
    {
      m_vExcel.OlePropertySet(&quot;Visible&quot;,true);
    }
</code></pre>
<p>Nach dem ich meine Arbeit im Excel getan habe, möchte ich Excel schliessen, das mache ich dann so:</p>
<pre><code class="language-cpp">m_vExcel.OleProcedure(&quot;Quit&quot;);
</code></pre>
<p>Jedoch, wenn ich mir den Task-Manager nachher anschaue, ist der EXCEL-Prozess immer noch drin, wenn ich jetzt paar Excel-Sheets öffne und schliesse, weil die Anwendung diese Arbeit verlangt, habe ich ja ne ganze Latte an Excel-Prozessen... <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f61e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--disappointed_face"
      title=":("
      alt="😞"
    /></p>
<p>Weiss jemand Rat für mich, muss ich irgendwie das Handle an Windows zurückübergeben?<br />
Wenn ich Excel nämlich nicht aus der Anwendung heraus schliesse, sondern das Excel selber, bleibt der Excel-Prozess trotzdem im Task-Manager.</p>
<p>Gruss,<br />
chullain</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1209355</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1209355</guid><dc:creator><![CDATA[chullain]]></dc:creator><pubDate>Sat, 13 Jan 2007 19:05:10 GMT</pubDate></item><item><title><![CDATA[Reply to Programm hinterlässt Prozess, obwohl beendet on Sun, 14 Jan 2007 13:17:56 GMT]]></title><description><![CDATA[<p>keine Ahnung, aber kann das etwas damit zu tun haben ?</p>
<p><a href="http://www.c-plusplus.net/forum/viewtopic-var-t-is-170076.html" rel="nofollow">http://www.c-plusplus.net/forum/viewtopic-var-t-is-170076.html</a></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1209654</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1209654</guid><dc:creator><![CDATA[OldMan00]]></dc:creator><pubDate>Sun, 14 Jan 2007 13:17:56 GMT</pubDate></item><item><title><![CDATA[Reply to Programm hinterlässt Prozess, obwohl beendet on Thu, 15 Feb 2007 09:36:44 GMT]]></title><description><![CDATA[<p>Hallo,</p>
<p>ich habe im Moment genau das gleiche Problem.<br />
Falls jemand einen Lösungsansatz gefunden hat, würde mich das auch interessieren.</p>
<p>Die Verwendung von ClearVariant(&amp;var) ist mir nich klar.</p>
<p>Danke für jede Hilfe</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1229263</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1229263</guid><dc:creator><![CDATA[Udo_11]]></dc:creator><pubDate>Thu, 15 Feb 2007 09:36:44 GMT</pubDate></item><item><title><![CDATA[Reply to Programm hinterlässt Prozess, obwohl beendet on Thu, 15 Feb 2007 09:59:08 GMT]]></title><description><![CDATA[<p>Hallo,</p>
<p>Hast du mal probiert, ob das &quot;Quit&quot; überhaupt ausgeführt wird? Ich verwende normalerweise die Wrapperklasse aus der FAQ (etwas geändert und erweitert). Da wird das</p>
<pre><code class="language-cpp">var_Excel.OleFunction(&quot;Quit&quot;);
</code></pre>
<p>im Destruktor aufgerufen, so dass das auf keinem Fall schief gehen kann.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1229280</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1229280</guid><dc:creator><![CDATA[Braunstein]]></dc:creator><pubDate>Thu, 15 Feb 2007 09:59:08 GMT</pubDate></item><item><title><![CDATA[Reply to Programm hinterlässt Prozess, obwohl beendet on Thu, 15 Feb 2007 10:10:11 GMT]]></title><description><![CDATA[<p>wie in meinem topic geschrieben, solltest du nicht immer neue variants anlegen sonder lieber EINEN variant für ALLES benutzen.<br />
Initialisier dein variant im ctor des programm quit ihn im dtor und wenn du zwischendurch etwas neues speichern willst lösch ihn vorher immer mit VariantClear();</p>
<p>ich hab nur nen standard VARIANT benutzt ich weis nicht was sich bei so nem Excelvariant noch für Probleme ergeben, aber vielleicht hilft das.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1229290</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1229290</guid><dc:creator><![CDATA[Ceos]]></dc:creator><pubDate>Thu, 15 Feb 2007 10:10:11 GMT</pubDate></item><item><title><![CDATA[Reply to Programm hinterlässt Prozess, obwohl beendet on Thu, 15 Feb 2007 10:34:47 GMT]]></title><description><![CDATA[<p>Hallo,</p>
<p>Danke für die schnellen Antworten.</p>
<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/1387">@Braunstein</a>: Ich benutze die gleiche Wrapperklasse (TMLExcel).Haben die Erweiterungen irgendetwas mit dem Speichern oder Scließen zu tun?</p>
<p>Zur Erklärung:</p>
<p>- Es wird eine Excel-Datei mit mehreren Tabellen geöffnet (Visible = false).<br />
- Es wird in einer oder mehreren Tabellen dieser Arbeitsmappe nach einer bestimmten Spaltenüberschrift gesucht und von dieser Spalte der Inhalt aller Zeilen in einer Stringliste gespeichert.<br />
- In dieser (oder diesen) Stringlisten wird ein bestimmter Wert gesucht<br />
- Wenn gefunden, wird die Zeilennummer und der Tabellenindex an das Hauptprogramm übergeben.<br />
- Es wird also in der Arbeitsmappe nichts geändert.<br />
- Es wird die Methode CloseWorkbook() aus der Wrapperklasse aufgerufen (Rückgabewert ist true!)<br />
- danach wird die Instanz gelöscht (delete ...);<br />
- Der Prozess bleibt erhalten.</p>
<p>Gruß Udo_11</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1229319</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1229319</guid><dc:creator><![CDATA[Udo_11]]></dc:creator><pubDate>Thu, 15 Feb 2007 10:34:47 GMT</pubDate></item><item><title><![CDATA[Reply to Programm hinterlässt Prozess, obwohl beendet on Thu, 15 Feb 2007 10:49:50 GMT]]></title><description><![CDATA[<p>Ich habe die Verwaltung der Workbooks und Worksheets ein wenig geändert. Mir hat das ganze gecaste mit der TList nicht behagt, so dass ich hier auf vector umgestellt habe. Das vereinfacht vieles. Dann habe ich noch das Auslesen von Shapes aus einem Excel-sheet mit eingebaut. Wenn du willst kann ich dir diese Dateien mal schicken.</p>
<p>Hier mal ein beispiel für die Veränderung einer Funktion</p>
<pre><code class="language-cpp">// alt
void __fastcall TMLWorkbook::UpdateSheetList()
{
FSheetNames-&gt;Clear();
if(Connect)
   {
   if(!(WorksheetCount ==FSheetNames-&gt;Count || WorksheetCount ==FWorksheets-&gt;Count ))
   {
   FSheetNames-&gt;Clear();
   for( int i=FWorksheets-&gt;Count-1;i&gt;=0;i--)
        {
           TMLWorksheet* sheet=  reinterpret_cast &lt;TMLWorksheet*&gt;( FWorksheets-&gt;Items[i]);
           if(sheet) delete sheet;
        }  
   FWorksheets-&gt;Clear();

   if(WorksheetCount&gt;0)
      {
         for( int i=1;i&lt;=WorksheetCount;i++)
            {
              TMLWorksheet * book=new TMLWorksheet(this,(Variant)var_Book.OlePropertyGet(&quot;WorkSheets&quot;,i));
              FWorksheets-&gt;Add((void*)book);

              FSheetNames-&gt;Add(var_Book.OlePropertyGet(&quot;Worksheets&quot;,i).OlePropertyGet(&quot;Name&quot;));
            }
      }
     // ShowMessage(FSheetNames-&gt;Text);
   }
   }
} 

//neu
void __fastcall TMLWorkbook::UpdateSheetList()
{
   if(Connect)
   {
     int count = GetWorksheetCount();
     FWorksheets.clear();
     FSheetNames.clear();
     if(count &gt; 0)
     {
         for( int i=1;i&lt;=WorksheetCount;i++)
         {
           FWorksheets.push_back(TMLWorksheet(this,(Variant)var_Book.OlePropertyGet(&quot;WorkSheets&quot;,i)));
           FSheetNames.push_back(var_Book.OlePropertyGet(&quot;Worksheets&quot;,i).OlePropertyGet(&quot;Name&quot;));
         }
     }
   }
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1229333</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1229333</guid><dc:creator><![CDATA[Braunstein]]></dc:creator><pubDate>Thu, 15 Feb 2007 10:49:50 GMT</pubDate></item><item><title><![CDATA[Reply to Programm hinterlässt Prozess, obwohl beendet on Fri, 16 Feb 2007 07:53:21 GMT]]></title><description><![CDATA[<p>Hallo,</p>
<p>@ Braunstein: Es wäre schön, wenn Du mir die Dateien schicken würdest.</p>
<p>Ich habe noch ein paar Tests gemacht und folgendes festgestellt:</p>
<p>1. Wenn ich die Eigenschaft <strong>Saved</strong> des geöffneten Excel-Workbooks auf <strong>false</strong> setze und somit beim Beenden von Excel der Abfragedialog zur Datenspeicherung erscheint und ich diesen Dialog mit JA bzw. NEIN verlasse, wird der Prozess ordnungsgemäß beendet.</p>
<p>2. Wenn ich die Eigenschaft <strong>Saved</strong> des geöffneten Excel-Workbooks auf <strong>true</strong> setze und somit Excel ohne Abfragedialog zur Datenspeicherung beendet wird bleibt der Prozess erhalten.</p>
<p>Ich hatte wohl noch nicht erwähnt, das die ganze Aktion in einem eigenen Thread abläuft und der Thread nach dem Schliessen von Excel beendet wird.</p>
<p>Ich hatte auch schon ein Sleep nach dem <strong>delete Excel</strong> eingebaut, das hat aber auch nichts gebracht.</p>
<p>Gruß Udo_11</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1229424</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1229424</guid><dc:creator><![CDATA[Udo_11]]></dc:creator><pubDate>Fri, 16 Feb 2007 07:53:21 GMT</pubDate></item><item><title><![CDATA[Reply to Programm hinterlässt Prozess, obwohl beendet on Mon, 19 Feb 2007 07:05:21 GMT]]></title><description><![CDATA[<p>Hallo,</p>
<p>Ich bin trotz mehrerer Versuche zu keinem Erfolg gekommen.<br />
Ich denke, das ist ein Zeitproblem im Thread.</p>
<p>Wenn ich nämlich die Excel-Instant außerhalb des Threads erstelle, dann wird diese beim Beenden des Threads immer beendet und auch der Prozess ist weg.<br />
Das Problem ist nur, das ich dann im Thread nicht auf die Excel-Instanz zugreifen kann.</p>
<pre><code class="language-cpp">void __fastcall Twk_satz::w_selectCompleted(TObject *Sender,
      bool &amp;Cancel)
{
  Cancel = dest_list-&gt;Items-&gt;Count &lt; 2;
  if (!Cancel)
  {
//    ShowMessage(&quot;searched = &quot;+BoolToStr(searched,true));
    if (go_xls == NULL &amp;&amp; !searched)
    {
      Excel = new TMLExcel;
      Excel-&gt;OpenWorkbook(MainForm-&gt;datapath+&quot;excel\\s_u_test.xls&quot;);
      Excel-&gt;CloseExcelOnTerminate = true;
      Application-&gt;ProcessMessages();
//      Sleep(5000);
      go_xls = new XLSSearch(Excel-&gt;Books[0]);
      found1 = false;
      found2 = false;
      go_xls-&gt;OnTerminate = DeleteThread;
    }
  }
  else
  {
     .
     .
     .
  }
}
//---------------------------------------------------------------------------
</code></pre>
<p>aus der .h-Datei des Threads:</p>
<pre><code class="language-cpp">class XLSSearch : public TThread
{
private:
  .
  .
  .
  TMLWorkbook *Excel;
protected:
  void __fastcall Execute();
public:
  __fastcall XLSSearch(TMLWorkbook *Xls);
};
</code></pre>
<p>aus der .cpp-Datei des Threads:</p>
<pre><code class="language-cpp">__fastcall XLSSearch::XLSSearch(TMLWorkbook *Xls) : TThread(false)
{
  Priority = tpNormal;
  FreeOnTerminate = true;
}
//---------------------------------------------------------------------------
</code></pre>
<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/1387">@Braunstein</a>: Wenn Du mir die Dateien schicken willst --&gt; <a href="mailto:udo.knirsch@stahlwerk-thueringen.de" rel="nofollow">udo.knirsch@stahlwerk-thueringen.de</a></p>
<p>Gruß Udo_11</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1230880</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1230880</guid><dc:creator><![CDATA[Udo_11]]></dc:creator><pubDate>Mon, 19 Feb 2007 07:05:21 GMT</pubDate></item><item><title><![CDATA[Reply to Programm hinterlässt Prozess, obwohl beendet on Mon, 19 Feb 2007 07:15:45 GMT]]></title><description><![CDATA[<p>Hallo,</p>
<p>Wieso kannst du im Thread nicht auf deine ExcelInstanz zugreifen? Du brauchst sie doch nur zu übergeben.<br />
Um das Löschen der Excelinstanz sicher zu machen, würde ich hier die Verwendung eines Smartpointer empfehlen. Dann wird im Destruktor dein Excelprozess zuverlässig geschlossen. In deinem Fall empfehle ich <a href="http://www.boost.org/libs/smart_ptr/smart_ptr.htm" rel="nofollow">boost::shared_ptr</a>.<br />
Die Dateien schicke ich dir gleich.</p>
<p>Ciao</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1230885</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1230885</guid><dc:creator><![CDATA[Braunstein]]></dc:creator><pubDate>Mon, 19 Feb 2007 07:15:45 GMT</pubDate></item><item><title><![CDATA[Reply to Programm hinterlässt Prozess, obwohl beendet on Mon, 19 Feb 2007 07:45:27 GMT]]></title><description><![CDATA[<p>Hallo,</p>
<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/1387">@Braunstein</a>: Danke für die Mail, ist angekommen.</p>
<p>Ich habe mich im letzten Posting falsch ausgedrückt. Ich kann auf die Excel-Instanz zugreifen, aber der Zugriff scheint ins leere zu gehen. Jeder Versuch,<br />
eine Eigenschaft zu verwenden, führt zu <strong>nichts</strong>. Die Funktionen werden nicht ausgeführt, es kommt keine Fehlermeldung, der Aufruf von GetLastError() liefert 0, der Thread wird beendet.</p>
<p>Ich weiß echt keinen Rat mehr.</p>
<p>Gruß Udo_11</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1230893</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1230893</guid><dc:creator><![CDATA[Udo_11]]></dc:creator><pubDate>Mon, 19 Feb 2007 07:45:27 GMT</pubDate></item><item><title><![CDATA[Reply to Programm hinterlässt Prozess, obwohl beendet on Mon, 19 Feb 2007 08:11:25 GMT]]></title><description><![CDATA[<p>Ich würde deinen Thread etwas umorganisieren</p>
<pre><code class="language-cpp">class XLSSearch : public TThread
{
private:
  .
  .
  .
  TMLWorkbook *WorkBook; //Bezeichnung Excel ist etwas mißdeutlich
protected:
  void __fastcall Execute();
public:
  __fastcall XLSSearch(TMLWorkbook *Xls);
};

__fastcall XLSSearch::XLSSearch(TMLWorkbook *Xls) : TThread(false), WorkBook(Xls) // WorkBook sollte schon im Konstruktor initialisiert werden, woanders geht es ja nicht
{
  Priority = tpNormal;
  FreeOnTerminate = true;
}
</code></pre>
<p>Hier muß natürlich sichergestellt werden, dass WorkBook immer auf eine gültige Instanz zeigt. Also Excel vorher nicht löschen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1230905</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1230905</guid><dc:creator><![CDATA[Braunstein]]></dc:creator><pubDate>Mon, 19 Feb 2007 08:11:25 GMT</pubDate></item><item><title><![CDATA[Reply to Programm hinterlässt Prozess, obwohl beendet on Mon, 19 Feb 2007 09:15:30 GMT]]></title><description><![CDATA[<p>Hallo,</p>
<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/1387">@Braunstein</a>: Habe Deinen Änderungsvorschlag eingearbeitet. Am Verhalten ändert sich jedoch nichts.</p>
<p>an einem Breakpoint im Debugger bekomme ich bei überwachten Ausdrücken folgende Ausgabe:</p>
<p>WorkBook: :01B2D2B0<br />
WorkBook-&gt;WorksheetCount: E2122 Funktionsaufruf durch unbehandelte Exception 0xeedfade an Adresse 0x7c812a5b beendet<br />
WorkBook-&gt;Sheets[0]-&gt;Name: E2122 Funktionsaufruf durch unbehandelte Exception 0xeedfade an Adresse 0x7c812a5b beendet</p>
<p>Das bedeutet doch, das Workbook auf eine Speicheradresse zeigt, aber nicht verwendet werden kann ???</p>
<p>Gruß Udo_11</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1230946</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1230946</guid><dc:creator><![CDATA[Udo_11]]></dc:creator><pubDate>Mon, 19 Feb 2007 09:15:30 GMT</pubDate></item><item><title><![CDATA[Reply to Programm hinterlässt Prozess, obwohl beendet on Mon, 19 Feb 2007 12:49:16 GMT]]></title><description><![CDATA[<p>Nun, das Workbook muß natürlich existieren. Debugge mal von dem Punkt aus, wo das Workbook erzeugt wird.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1231144</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1231144</guid><dc:creator><![CDATA[Braunstein]]></dc:creator><pubDate>Mon, 19 Feb 2007 12:49:16 GMT</pubDate></item><item><title><![CDATA[Reply to Programm hinterlässt Prozess, obwohl beendet on Mon, 19 Feb 2007 14:00:42 GMT]]></title><description><![CDATA[<p>Hallo,</p>
<p>Beim Debuggen ab dem Zeitpunkt der Erstellung der Excel-Instanz sieht das folgendermaßen aus:</p>
<p>Breakpoint Excel-Initialisierung --&gt; Ok<br />
Breakpoint im Konstruktor des Threads: WorkBook existiert (Adresse: 01B2D2B0) und ich kann in überwachten Ausdrücken alle Funktionen des WorkBook aufrufen.</p>
<p>Breakpoint am Beginn der Execute-Methode des Threads: WorkBook-Adresse ist die gleiche, aber beim Zugriff auf die Funktionen des WorkBooks kommen die im letzten Posting gezeigten Fehler.</p>
<p>Gruß Udo_11</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1231222</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1231222</guid><dc:creator><![CDATA[Udo_11]]></dc:creator><pubDate>Mon, 19 Feb 2007 14:00:42 GMT</pubDate></item><item><title><![CDATA[Reply to Programm hinterlässt Prozess, obwohl beendet on Mon, 19 Feb 2007 15:28:19 GMT]]></title><description><![CDATA[<p>Dann scheint das Workbook irgendwo dazwischen freigegeben worden zu sein. Schau dir mal alle Funktionen an, mit denen man das Workbook freigebn kann. Setze gegebenenfalls Breakpoints in die Destruktoren von TMLWorkBook sowie TMLExcel und schau ob und wann die aufgerufen werden.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1231309</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1231309</guid><dc:creator><![CDATA[Braunstein]]></dc:creator><pubDate>Mon, 19 Feb 2007 15:28:19 GMT</pubDate></item><item><title><![CDATA[Reply to Programm hinterlässt Prozess, obwohl beendet on Tue, 20 Feb 2007 08:04:40 GMT]]></title><description><![CDATA[<p>Hallo,</p>
<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/1387">@Braunstein</a>: Nach Deinem Hinweis von gestern habe habe ich den Debugger nochmal bemüht und folgendes festgestellt:</p>
<p>Im Konstruktor des Threads ist ein Zugriff auf WorkBook-&gt;Name möglich</p>
<p>Die Excel-Instanz wird bei mir <strong>nur</strong> in der Funktion gelöscht, welche ich dem OnTerminate-Ereignis des Threads zugewiesen habe.</p>
<p>OnTerminate wird laut Builder-Hilfe ausgelöst, wenn die Execute-Methode des Threads zurückkehrt.</p>
<p>Die Execute-Methode meines Threads wird beendet, <strong>weil</strong> sie einen Fehler beim Zugriff auf WorkBook-&gt;Name produziert.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1231670</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1231670</guid><dc:creator><![CDATA[Udo_11]]></dc:creator><pubDate>Tue, 20 Feb 2007 08:04:40 GMT</pubDate></item><item><title><![CDATA[Reply to Programm hinterlässt Prozess, obwohl beendet on Tue, 20 Feb 2007 08:55:45 GMT]]></title><description><![CDATA[<p>Ok, ich ahne was los ist. Übergib mal statt der Workbookinstanz die Excelinstanz an deinen Thread. Die Excelinstanz verwaltet ja die Workbooks und da kann es evtl. vorkommen, dass der Pointer auf ein Workbook intern gelöscht und neu erzeugt wird. Dann hättest du einen ungültigen Pointer in deinem Thread.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1231701</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1231701</guid><dc:creator><![CDATA[Braunstein]]></dc:creator><pubDate>Tue, 20 Feb 2007 08:55:45 GMT</pubDate></item><item><title><![CDATA[Reply to Programm hinterlässt Prozess, obwohl beendet on Tue, 20 Feb 2007 10:04:40 GMT]]></title><description><![CDATA[<p>Hallo,</p>
<p>Bei der Übergabe der Excel-Instanz an den Thread zeigt sich das gleiche Fehlerbild.</p>
<p>Der Fehler wird ausgelöst in der TMLExcel-Klasse in der Funktion GetWorkbookCount()</p>
<pre><code class="language-cpp">int TMLExcel::GetWorkbookCount()
{
  if(!Connect)
   return 0;
  else
   return var_Excel.OlePropertyGet(&quot;Workbooks&quot;).OlePropertyGet(&quot;Count&quot;);  //in dieser Zeile !!!
}
</code></pre>
<p>Gruß Udo_11</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1231754</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1231754</guid><dc:creator><![CDATA[Udo_11]]></dc:creator><pubDate>Tue, 20 Feb 2007 10:04:40 GMT</pubDate></item><item><title><![CDATA[Reply to Programm hinterlässt Prozess, obwohl beendet on Tue, 20 Feb 2007 14:12:54 GMT]]></title><description><![CDATA[<p>Hallo,</p>
<p>Ich habe jetzt folgende Fehlermeldung:</p>
<blockquote>
<p>Fehler:<br />
Eine Schnittstelle, die für einen anderen Thread marshalled war, wurde von der Anwendung aufgerufen</p>
</blockquote>
<p>Das ganze hat mit Marshalling und COM+ zu tun. Ich habe auch schon etliche Artikel im Netz gefunden, weiß aber nicht so recht wie man das im konkreten Fall umsetzen muß.<br />
Wenn dazu jemand etwas sagen kann, wäre das wunderbar.</p>
<p>Gruß Udo_11</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1231990</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1231990</guid><dc:creator><![CDATA[Udo_11]]></dc:creator><pubDate>Tue, 20 Feb 2007 14:12:54 GMT</pubDate></item><item><title><![CDATA[Reply to Programm hinterlässt Prozess, obwohl beendet on Wed, 21 Feb 2007 14:14:03 GMT]]></title><description><![CDATA[<p>Hallo,</p>
<p>für alle, die es vielleicht interessiert. Ich habe jetzt eine Variante gefunden, bei welcher das Durchsuchen einer Exceldatei in einem eigenen Thread funktioniert.</p>
<p>Das Excel-Objekt wird im Thread initialisiert.</p>
<pre><code class="language-cpp">void __fastcall XLSSearch::Execute()
{
  OleCheck(CoInitialize(NULL));

  try
  {
    FExcel = new TMLExcel;
    FExcel-&gt;OpenWorkbook(MainForm-&gt;datapath+FileName);
    FExcel-&gt;CloseExcelOnTerminate = true;
    FExcel-&gt;Books[0]-&gt;Saved = true;  // damit beim Schließen von Excel kein Speichern-Dialog eingeblendet wird

    try
    {
      ExcelSuche([Parameter]); // hier werden auch Parameter übergeben
    }
    catch(Exception &amp;e)
    {
      msg = &quot;Fehler beim Start der ExcelSuche():&quot;;
      Synchronize(WriteMsg);   //Eintrag in eine log-Datei
      msg = e.Message;
      Synchronize(WriteMsg);   //Eintrag in eine log-Datei
    }
  }
  __finally
  {
    delete FExcel;
    FExcel = NULL;
    CoUninitialize;
  }
}
//---------------------------------------------------------------------------
</code></pre>
<p>Die Funktion, die dem OnTerminate des Threads zugewiesen ist:</p>
<pre><code class="language-cpp">void __fastcall XLSSearch::DeleteThread(TObject *Sender)
{
  delete FExcel;
  FExcel = NULL;
  CoUninitialize;
  Flog-&gt;Add(&quot;Thread beendet.&quot;);
}
//---------------------------------------------------------------------------
</code></pre>
<p>Sooft ich getestet habe, wurde Excel ordnungsgemäß geschlossen und auch der Prozess jedesmal beendet.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1232637</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1232637</guid><dc:creator><![CDATA[Udo_11]]></dc:creator><pubDate>Wed, 21 Feb 2007 14:14:03 GMT</pubDate></item></channel></rss>