Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   XML (https://www.delphipraxis.net/46-xml/)
-   -   Delphi Warum CoInitialize (https://www.delphipraxis.net/15390-warum-coinitialize.html)

Sanchez 27. Jan 2004 18:44


Warum CoInitialize
 
hallo,

Ich habe gerade eine Klasse geschrieben, die mir Daten aus einem XML holt bzw schreibt.

Bei
Delphi-Quellcode:
  xmlDoc  := CoDOMDocument40.Create;
hat er mit zuerst mit der Meldung
Code:
'Coinitialize wurde nicht aufgerufen'
abgebrochen.

Das hab ich jetzt mit
Delphi-Quellcode:
  OleInitialize(nil);
im Konstruktor und
Delphi-Quellcode:
  OleUninitialize;
im Destruktor der Klasse gelöst.

Meine Frage dazu:
Bei einem Programm das ich mal mit D6 pro geschrieben habe, war das nicht nötig.
Warum brauch ich das mit D7 pro?

grüße, daniel

Bernhard Geyer 28. Jan 2004 07:28

Re: Warum CoInitialize
 
Eigentlich nur wenn die dpr-Datei aus alten Programmen verwendet wird und nicht "vollständig" ist.

In der DPR-Datei sollte der Eintrag:

Application.Initialize;

vorhanden sein. Damit erledigt Delphi alles nötige (u. a. auch das CoInitialize). Es könnte bei deinem Projekt unter D6 der Fall sein das ein CoInitialize durch die uses-Anweisung einer entsprechenden Unit automatisch ausgeführt wurde (und dazu nicht Application.Initialize benötigt hat). Es stört nicht wenn mehrmals CoInitialize aufgefuren wird. Es sollte halt die gleiche Anzahl von CoUninitialize aufgerufen werden.

CoInitialize benötigst Du deshalb um das COM-Subsystem zu initialisieren, welches du verwendest.

Aenogym 10. Jan 2006 14:06

Re: Warum CoInitialize
 
hi,

schreibe grad ein kleines konsolenprogramm, dass XML-dateien ausliest.
dazu muss ich ja auch OleInitialize() aufrufen.

doch in welcher unit sind die deklariert? :?

ein druck auf F1 bringt mir ja leider die WinAPI-referenz, in der ja nicht die delphi-unit steht...

edit: okay danke, hat sich erledigt. ein "suchen in dateien" hat gezeigt, dass die funktion in der ActiveX.pas deklariert ist (:oops: hätt ich ja auch selber drauf kommen können)

aeno

Jens Schumann 10. Jan 2006 14:24

Re: Warum CoInitialize
 
Zitat:

Zitat von Bernhard Geyer
...
CoInitialize benötigst Du deshalb um das COM-Subsystem zu initialisieren, welches du verwendest.

Initialisieren bedeutet: Jeder Thread muss unter COM ein eigenes Apartment anmelden. Das passiert mit dem Aufruf von CoInitialize.


Alle Zeitangaben in WEZ +1. Es ist jetzt 00:11 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz