Announcement

Collapse
No announcement yet.

CoInitialize und TThread

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

  • CoInitialize und TThread

    Hallo,
    laut einem White Paper von Borland muss man bei Verwendung von zB. (?) XML_Document als COM-Objekt in einem Thread manuell CoInitialize und am Ende CoUnInitialize aufrufen.

    Nachdem ich das korrigiert hatte, funktionierte es auf allen Rechnern.

    Wieso aber funktionierte es vorher auch schon auf einem Rechner mit WinXPSP2 und Delphi 6.2 und auf einem anderen Rechner mit XPSP2 und Delphi 6.2 nicht? zumindest beim Start aus Delphi kam an der Stelle Active := true auf einem Rechner die Meldung, das CoInitialize nicht aufgerufen wurde.

    Kann das an einigen Debugger- oder Compiler-Optionen liegen? Installierte und nicht installierte MS-Bugfixes? Andere Programme, die das XML-Objekt auf dem einen Rechner ueberschreiben ?

    vielen Dank.
    Andre

  • #2
    An Compiler oder Debugger-Option eigentlich nicht . Aber da Defaultmäßig der MS XML-Parser verwendet wird kann es sicherlich sein das die DLL-Hölle zuschlägt (Falsche DLL-Versionen, Falsche COM-Registrierung, ...).

    Kann das Problem mit einem kleinen Testprogramm und ohne verwendung von Threads nachvollzogen werden

    Comment


    • #3
      Es ist ja insofern kein Problem mehr, da ich ja die Initialisierungen hinzugefuegt habe und nun alles laeuft. Dachte nur, ich waere vielleicht ueber ein bekanntes Problem gestolpert.

      Hab das aber mal eben in dem selben Programm ohne Thread getestet und da gibts keine Probleme.

      Funktioniert auf jedem Rechner.

      Andr

      Comment


      • #4
        <br>Hallo,<br>
        Soviel ich weiß. Wenn man das in einem normalem Programm mit Formular benützt, ist dieses (coInitialize) schon in dem Abschnitt "Application.Initialize" aufgerufen wurde. In einem Thread startet es ein neues Prozess. Deshalb wird coInitialize extra für dieses Prozess nachträlich aufgerufen muss<BR>
        Wenn meine Überlegung falsch ist, bitte korrigieren<BR>
        Gruß<BR>
        Khanh L

        Comment


        • #5
          ja, das stimmt. Die Frage ist aber, warum es aber _ohne_ CoInitialize in einem Thread auf _einigen_ Rechnern funktioniert.

          Andr

          Comment


          • #6
            Hallo,<br>
            in einigen Rechnern ist dieses Component durch andere Anwendung z.B.: Office, WebBrowser, IE ...etc initialisiert.<br>
            Das Component , denke ich, ist bereits aufgerufen. Es wird nochmals in deinem Thread aufgerufen und zufälligerweis benützt es den gleichen Global-Speicher.<br>
            Gründsätzlich ruft man in jedem Prozess das coInitialize auf dann hat man das Problem nicht mehr.<br>
            Um sicherzugehen verwende ich immer <br>
            if coInitialize = S_????? then<br>
            <br><br>
            <B>
            S_OK

            Indicates the library was initialized successfully.

            S_FALSE

            Indicates that the library is already initialized or that it could not release default allocator.
            <B>
            Gruß<br>
            Khanh L

            Comment


            • #7
              Hallo,
              hmm, dass waere moeglich.

              Danke.
              Andr

              Comment


              • #8
                Frage mal Herrn Kosch. Er weiß bestimmt meh

                Comment

                Working...
                X