Announcement

Collapse
No announcement yet.

Outlook.exe wird nicht beendet

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Outlook.exe wird nicht beendet

    Hallo,<br>
    <br>
    über Automation starte ich eine Outlook-Instanz und möchte diese nach<br> vollbrachter Arbeit wieder beenden. Das sieht wie folgt aus:<br>
    <br>
    <b>Erzeugen:</b><br>
    <br>
    <i>
    aOutlook := CreateOleObject('Outlook.Application');<br>
    aNmSpace := aOutlook.GetNamespace('MAPI');<br>
    aNmSpace.Logon(EmptyParam, EmptyParam, False, True);<br>
    aFolder := aNmSpace.GetDefaultFolder(olFolderInbox);<br>
    aFolder.Display;<br>
    </i>
    <br>
    <b>Zerstören:</b><br>
    <br>
    <i>
    aNmSpace.Logoff;<br>
    aOutlook.Quit;<br>
    aOutlook := unassigned;<br>
    </i>
    <br>
    Nun habe ich folgendes Problem. Nachdem ich den Interfacezeiger auf unassigned<br> gesetzt habte, beendet sich die Outlook.exe nicht. Erst nachdem meine<br> Applikation beendet wurde ist der Task verschwunden.<br>
    <br>
    Hat jemand eine Idee warum?<br>
    <br>
    Schönen Gruß,<br>
    André Mellenthin<br>

  • #2
    Hallo,

    &gt;Hat jemand eine Idee warum?

    ja - denn beim Zugriff über die späte Bindung (alias IDispatch-Interface) darf man den Komfort der vollständigen Kontrolle über die Referenzen der Interface-Zeiger nicht erwarten.

    Erst dann, wenn für den Interface-Zeiger <b>kein</b> OleVariant-/Variant-Typ genutzt wird, sondern der Interface-Typ aus der importierten Typbibliotheks-Unit, hört der Spuk auf

    Comment


    • #3
      Hallo,<br>
      <br>
      aha, das hilft mir schon einmal sehr viel weiter. Vielen Dank. <br>
      <br>
      Das Verhalten lässt sich ebenfalls mit der TOutlookApplication<br>Kapselung von Borland (Delphi7) nachvollziehen. Bedeutet dies,<br>
      dass die Komponente trotz vollem Zugriff auf die Typenbibliothek<br>
      auf das langsamere IDispatch-Interface zugreift?<br>
      <br>
      Schönen Gruß,<br>
      André Mellenthin<br&gt

      Comment


      • #4
        Hallo,<br>
        <br>
        ich habe es jetzt noch einmal wie folgt versucht, jedoch mit dem<br> gleichen Effekt wie vorher. Der Task wird nicht beendet.<br>
        <br>
        <i>
        uses Outlook_Tlb; // frisch importiert<br>
        <br>
        cOutlook := CoOutlookApplication.Create;<br>
        cNmSpace := cOutlook.GetNamespace('MAPI');<br>
        cNmSpace.Logon('', '', false, true);<br>
        cFolder := cNmSpace.GetDefaultFolder(olFolderInbox);<br>
        cFolder.Display;<br>
        <br>
        {...}<br>
        <br>
        cNmSpace.Logoff;<br>
        cOutlook.Quit;<br>
        cOutlook := nil;<br>
        <br>
        </i><br>

        Müsste es so dann nicht theoretisch korrekt funktionieren?<br>
        <br>
        Schönen Gruß,<br>
        André Mellenthin<br&gt

        Comment


        • #5
          Hallo,

          &gt;..Müsste es so dann nicht theoretisch korrekt funktionieren?

          wenn das Programm alle beteiligten Interface-Zeiger in der richtigen Reihenfolge wieder freigibt, sollte die Anwendung am Ende verschwinden. Allerdings hat jeder COM-Server das Recht, sich über die Win32-API-Funktion <i>CoAddRefServerProcess</i> selbst zu sperren, wenn bestimmte Arbeiten zu diesem Zeitpunkt noch nicht erledigt sind und ein Terminieren daher ungünstig wäre

          Comment


          • #6
            Ok, vielen Dank für die Informationen.<br>
            <br>
            Schönen Gruß,<br>
            André Mellenthin<br&gt

            Comment

            Working...
            X