Announcement

Collapse
No announcement yet.

Fehlermeldung "CoInitialize wurde nicht gefunden".

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

  • Fehlermeldung "CoInitialize wurde nicht gefunden".

    Hallo,

    ich bekomme seit kurzen,
    beim instzallieren (zur Laufzeut) einer ActivX Komponente die Fehlermeldung "CoInitialize wurde nicht gefunden".
    Die Anwendung ist vor Tagen noch ohne Fehlermeldung gelaufen.

    Wo kann der Grund für die plötzliche Fehlermeldung liegen.

    Danke Michael

  • #2
    Hallo,

    stimmt diese Fehlermeldung Wort für Wort exakt überein oder ist "<i>CoInitialize wurde nicht aufgerufen</i>" gemeint?

    Wenn es sich tatsächlich um "CoInitialize wurde nicht gefunden" handelt, welche Windows-Version wird verwendet und welche Versionsnummer/Dateidatum hat <b>OLE32.DLL</b>

    Comment


    • #3
      Hallo Andreas,

      die Fehlermeldung lautet in der Tat "CoInitialize wurde nicht aufgerufen".

      Ich benutze Win2000/Delphi 5E.
      Versionsnummer der Datei OLE32.DLL =5.0.2181.1
      Dateidatum der Datei OLE32.DLL =10.12.99

      Wo kann der Fehler liegen

      Comment


      • #4
        Hallo,

        in diesem Fall ist mit OLE32.DLL alles in Ordnung, statt dessen kommt ein Veto vom <b>Marshaler</b>. Der Marshaler ist unter Win32 für die Überwindung einer Thread- oder Prozess-Grenze zuständig, wobei er immer dann mit der Fehlermeldung "<i>CoInitialize wurde nicht aufgerufen</i>" sein Veto einlegt, wenn eine der beiden beteiligten Stellen (Threads oder Prozesse) <b>kein</b> Apartment definiert hat. Somit ist dem Marshaler nicht bekannt, welches Regelwerk er verwenden soll. Ein <b>Apartment</b> als logisches Denkmodell wird von einem ausführbaren Modul über die API-Funktion CoInitialize bzw. CoInitializeEx angemeldet.

        Wenn diese Fehlermeldung plötzlich auftaucht, obwohl die Anwendung vorher "fehlerfrei" lief, hört sich das nach einem Seiteneffekt einer System-Aktualisierung an. Vermutlich wurde eine neuere Anwendung installiert (IE 5.x; Office 2000 etc.), die einen <b>Bug-Fix</b> für COM mit installiert hat, so dass nun der immer vorhandene Fehler (nicht deklariertes Apartment) zum ersten Mal als Fehlermeldung auch wirklich angezeigt wird.

        Wurde die Anwendung mit Delphi 5 neu angelegt oder handelt es sich um ein älteres Projekt? Taucht dort in der DPR-Datei der Aufruf <b>Application.Initialize;</b> in der ersten Zeile auf? Wenn nicht, was passiert, wenn diese Zeile nachgetragen wird

        Comment


        • #5
          Hallo Andreas,

          danke für deine ausführliche Beschreibung.

          Ich habe keine neue Software installiert.

          Da die zu Laufzeit installierte Komponente in meiner Anwendung einwandfrei arbeitete, gehe ich auch davon aus das sie richtig installiert wurde und die Fehlermeldung nicht nur einfach nicht angezeigt wurde.

          Nachdem ich die installation der Komponente aus dem "initialization-Abschnitt" (Haptform) in "FormCreate-Procedure" (Hauptform)verlegt habe läft die Anwendung wieder.
          Ich dachte das der "initialization-Abschnitt" aber genau für solche Aufgabe beim Programmstart gedacht ist.
          Wenn Nein, wo ist der richtige Ort beim Programmstart alle Komponenten zu installieren?

          Den gleichen Fehler bekamm ich nachdem ich versucht habe ein Word/Excel-Object im "initialization-Abschnitt" zu installieren.

          Danke für Deine Bemühungen.
          Michae

          Comment


          • #6
            Hallo,

            ich hatte genau dasselbe Problem. Ich habe eine Standardroutine, mit der ich Datenbanktabellen in Excel übergebe. Die Standardroutine ist in einer allgemeinen Unit implementiert. Von heute auf morgen bekam ich bei einer Anwendung die Meldung "CoInitialize wurde nicht aufgerufen" und zwar beim Aufruf von "Excel:=CreateOleObject('Excel.Application');" Dieser Fehler liess sich auf verschiedenen Rechnern nachvollziehen.
            Sobald ich die Export-Funktion aber aus einem anderen Projekt aufgerufen habe, lief das Ganze einwandfrei.
            Nachdem ich den Fehler durch herauslöschen von mehr und mehr Funktionen nicht beheben konnte, und das betroffene Formular nicht zu umfangreich war, habe ich es noch mal neu erstellt indem ich zuerst die visuellen Komponenten kopiert habe und dann die zugehörigen Abarbeitungen der Ereignisse. Jetzt läuft das Ganze wieder.

            Gruß Ger

            Comment


            • #7
              Hallo,

              ich hatte dasselbe Problem. Ich habe eine Standardroutine, mit der ich Datenbanktabellen in Excel übergebe. Die Standardroutine ist in einer allgemeinen Unit implementiert. Von heute auf morgen bekam ich bei einer Anwendung die Meldung "CoInitialize wurde nicht aufgerufen" und zwar beim Aufruf von "Excel:=CreateOleObject('Excel.Application');" Dieser Fehler liess sich auf verschiedenen Rechnern nachvollziehen.

              Sobald ich die Export-Funktion aber aus einem anderen Projekt aufgerufen habe, lief das Ganze einwandfrei.

              Auch das Kompilieren einer alten Ausführung führte zu diesem Fehler, obwohl die damalige EXE auch heute noch einwandfrei läuft. Nachdem ich den Fehler durch herauslöschen von mehr und mehr Funktionen nicht beheben konnte, und das betroffene Formular nicht zu umfangreich war, habe ich es noch mal neu erstellt indem ich zuerst die visuellen Komponenten kopiert habe und dann die zugehörigen Abarbeitungen der Ereignisse. Jetzt läuft das Ganze wieder.

              Gruß Ger

              Comment


              • #8
                Hallo,

                wenn Delphi 5 verwendet wird, meldet das eigene Programm erst dann ein Apartment an, wenn in der DPR-Datei die Zeile <b>Application.Initialize</b> aufgerufen wird. Greift man vorher (Initialization-Sektion einer Unit) auf COM-Interfaces über eine Thread/Prozess-Grenze zu, legt der Marshaler sein Veto ein.

                Wenn es also unbedingt der Initialization-Abschnitt sein soll, muss man bereits dort das aufrufen, was Application.Initialize erst später gemacht hätte.

                Immer dann, wenn ein <b>altes</b> Projekt (Delphi 3/4) mit Delphi 5 <b>neu</b> compiliert werden soll, muss man in der DPR-Datei die Zeile <b>Application.Initialize</b> von Hand nachtragen. Borland hat mit Delphi 5 den Aufruf-Mechanismus von <b>CoInitialize</b> geändert (d.h. Delphi 5 ist nun flexibler als Delphi 3/4), daher muss nun CoInitialize (Application.Initialize) selbst aufgerufen werden.

                &#10

                Comment

                Working...
                X