Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Exception EOleSysError: CoInitialize wurde nicht aufgerufen. (https://www.delphipraxis.net/20757-exception-eolesyserror-coinitialize-wurde-nicht-aufgerufen.html)

The-X 22. Apr 2004 15:43


Exception EOleSysError: CoInitialize wurde nicht aufgerufen.
 
^^ die kommt z.B. wenn ich den Desktop Hintergrund ändern will (incl. Active Desktop)

Delphi-Quellcode:
procedure ChangeWallpaper(aFile: String);
 const CLSID_ActiveDesktop: TGUID = '{75048700-EF1F-11D0-9888-006097DEACF9}';
var
  hObj: IUnknown;
  ADesktop: IActiveDesktop;
  wstr: PWideChar;
begin
  hObj    := CreateComObject(CLSID_ActiveDesktop); // hier gibt's die Exception
  ADesktop := hObj as IActiveDesktop;
  wstr := AllocMem(MAX_PATH);
  try
    StringToWideChar(aFile, wstr, MAX_PATH);
    ADesktop.SetWallpaper(wstr, 0);
    ADesktop.ApplyChanges(AD_APPLY_ALL or AD_APPLY_FORCE);
  finally
    FreeMem(wstr);
  end;

  SystemParametersInfo(SPI_SETDESKWALLPAPER,0,pointer(aFile),
    SPIF_SENDWININICHANGE);
end;
Stelle im Source markiert ... // hier ;)

Die erscheint aber nur, weil ich keine Formulare benutze? , da ich das ganze direkt in die dpr packe um das prog klein zu halten (75K).... da gleiche problem hatte ich bei einer eigenen CPL (Systemsteuerung) und da hatte ich Formulare (ohne wäre auch ziemlich sinnlos *gg*)
allerdings bei der TShellLink-Komponente...

Hat zufällig jemand eine Lösung für mich? ich find das ganze nämlich ziemlich "bescheiden" :roll:

Luckie 22. Apr 2004 15:54

Re: Exception EOleSysError: CoInitialize wurde nicht aufgeru
 
Wenn du das liest:
Zitat:

Exception EOleSysError: CoInitialize wurde nicht aufgerufen.
Was würdest du tun, um den Fehler zu beseitigen? Mal was anderes aus dem wirklcihen Leben, soll es ja auch noch geben. Die schaltest eine Lampe ein und eine Stimme sagt: "Kann kein Licht machen, weil keine Birne eingeschraubt ist." Was machst du dann? ;)

The-X 22. Apr 2004 15:57

Re: Exception EOleSysError: CoInitialize wurde nicht aufgeru
 
Luckie mein Lieber ;) das würde ich ja gerne tun, wenn ich nur wüsste zu welchem Objekt diese funktion gehört ??

denn z.B. in der Standalone-Version von meinem StartUp-Manager taucht das Problem beim Verknüpfung auslesen nicht auf... nur in der Cpl-Version

[edit] btw. ich finde diese funktion bei keinem einzigen Objekt...
lediglich so:

Zitat:

Zitat von Code Hint
Const ComObj.CoInitializeEx: TCoInitializeExProc - ComObj.Pas (401)

und was ich damit machen soll ? Keine Ahnung ? :roll:
[/edit]

Luckie 22. Apr 2004 17:05

Re: Exception EOleSysError: CoInitialize wurde nicht aufgeru
 
Zitat:

Zitat von The-X
Luckie mein Lieber ;) das würde ich ja gerne tun, wenn ich nur wüsste zu welchem Objekt diese funktion gehört ??

CreateComObject braucht diesen Aufruf eventuell vorher?
Zitat:

denn z.B. in der Standalone-Version von meinem StartUp-Manager taucht das Problem beim Verknüpfung auslesen nicht auf... nur in der Cpl-Version
Anderer Code?

Zitat:

[edit] btw. ich finde diese funktion bei keinem einzigen Objekt...
lediglich so:

Zitat:

Zitat von Code Hint
Const ComObj.CoInitializeEx: TCoInitializeExProc - ComObj.Pas (401)


Scheint wohl in der Unit ComObj zu liegen. Und warum suchst du diese Funktion als eine Eigenschaft von irgendwelechen Objekten?

Zitat:

und was ich damit machen soll ? Keine Ahnung ? :roll:
[/edit]
Aufrufen eventuell? :roll:

Jens Schumann 22. Apr 2004 18:58

Re: Exception EOleSysError: CoInitialize wurde nicht aufgeru
 
Hallo,
hier ist die CoInitialize Funktion aus dem Windows API gemeint.
CoUnInitialize nicht vergessen !!! und in der Win32-Referenz nachschauen.
Oder dort: CoInitialize

MathiasSimmack 22. Apr 2004 19:34

Re: Exception EOleSysError: CoInitialize wurde nicht aufgeru
 
Zitat:

Zitat von Luckie
Mal was anderes aus dem wirklcihen Leben, soll es ja auch noch geben. Die schaltest eine Lampe ein und eine Stimme sagt: "Kann kein Licht machen, weil keine Birne eingeschraubt ist." Was machst du dann? ;)

Ich drehe mich um und suche den Sprecher. :)


@The-X: Was machst du, wenn der Active Desktop nicht aktiv ist? klick, klick.

The-X 23. Apr 2004 14:06

Re: Exception EOleSysError: CoInitialize wurde nicht aufgeru
 
Liste der Anhänge anzeigen (Anzahl: 1)
matthias? was denkst du denn, woher ich diesen Code (zum teil jedenfalls) her habe ???
desweiteren geht es mir mehr um diese exception als um das ändern des Hintergrundes an sich ;)

ich häng gleich mal das ganze gezippt an... dann könnt ihr ja selber mal guggn, weil ich werd daraus nicht schlau... wenn ich die Procedure über eine Form aufrufe funktioniert's einwandfrei,
aber wenn ich diese Procedure in einem Programm ohne Formulare einfach in eine .dpr kopiere, compiliere und dann aufrufe kommt in der ersten Code-Zeile (wie markiert) diese verdammte Exception :wall:

und was den Active-Desktop angeht... ohne ihn funktioniert's ja.
erst nachdem ich den Source zum ändern vom AD mit reingetan hab kam die Exception

The-X 23. Apr 2004 14:19

Re: Exception EOleSysError: CoInitialize wurde nicht aufgeru
 
Zitat:

Zitat von Jens Schumann
Hallo,
hier ist die CoInitialize Funktion aus dem Windows API gemeint.
CoUnInitialize nicht vergessen !!! und in der Win32-Referenz nachschauen.
Oder dort: CoInitialize

:shock: seit wann ist eine Konstante eine Funktion ?

Zitat:

Zitat von Code Hint
Const ComObj.CoInitializeEx: TCoInitializeExProc - ComObj.Pas (401)

und dazu

Zitat:

Zitat von Luckie

Zitat:

Zitat von The-X
denn z.B. in der Standalone-Version von meinem StartUp-Manager taucht das Problem beim Verknüpfung auslesen nicht auf... nur in der Cpl-Version

Anderer Code?

^^ Ja, aber auch Unit ShlObj bzw. ComObj um Verknüpfungen auszulesen.

The-X 23. Apr 2004 14:28

Re: Exception EOleSysError: CoInitialize wurde nicht aufgeru
 
Hat sich erledigt :wall:

Unit ActiveX eingebunden,
CoInitialize(nil);
am Anfang, und
CoUnInitialize;
am Ende der Procedure aufgerufen :roll:

und schwupps ;) war die exception weg :shock:

[OT]
k.a. warum aber ich komme zu der Folgerung, das Unit Forms auch Unit ActiveX benutzt?
weil sonst ist kein Unterschied festzustellen ?
[/OT}

MathiasSimmack 23. Apr 2004 14:41

Re: Exception EOleSysError: CoInitialize wurde nicht aufgeru
 
Nur mal so: Das Problem tritt bspw. auch auf, wenn man den MS-XML-Parser in einer Konsolen- oder nonVCL-Anwendung benutzen will. Bei der VCL gibt es garantiert eine der eingebundenen Units, die ihrerseits "CoInitialize" aufruft. Ansonsten muss man es selbst machen. Ich habe es mir inzwischen angewöhnt, es auch in VCL-Apps grundsätzlich selbst aufzurufen:
Delphi-Quellcode:
unit Form1;

{ ... }

initialization
  CoInitialize(nil);
finalization
  CoUninitialize;
end.
und damit bin ich bisher recht gut gefahren.

The-X 23. Apr 2004 15:04

Re: Exception EOleSysError: CoInitialize wurde nicht aufgeru
 
Mit XML Hat ich bisher noch nix am Hut ;) :angle2: aber ich denke mal das sich das Problem bei meinem Start-Up Manager auch so lösen lässt wobei ich hier auch nur eine alternative dpr-Datei verwende um das Cpl-(Dll-)Format wegen der Parameter und so einzuhalten ;)

Delphi_Fanatic 17. Okt 2007 14:56

Re: Exception EOleSysError: CoInitialize wurde nicht aufgeru
 
Auch wenn Ihr das vielleicht nicht so gerne seht, wenn irgendwelche "Ur-Alt-Threads" wieder hochgeholt werden, aber ich hätte dennoch eine Frage dazu.
Und wozu sollte ich einen neuen Thread eröffnen, wenn meine Frage hervorragend in diesen 3-Jahre alten Thread passt ?

Folgendes Problem :

Ich habe eine non-VCL-Anwendung, von der aus ich nun auf Access-Datenbanken und ggf. auch auf XML-Dateien zugreifen muss.
Zuerst klappte das nicht, aber als ich die Suche hier in der Delphi-Praxis genutzt habe bin ich auf diesen Thread gestossen.

Nachdem ich dann diese Zeilen von "Mathias Simmack" eingebaut habe (besten Dank übrigens :-D ) :

Zitat:

unit Form1;

{ ... }

initialization
CoInitialize(nil);
finalization
CoUninitialize;
end.
hat's mit dem Zugriff auf Access problemlos geklappt ! :thumb:

Weiterhin hatte Matthias Simmack noch folgendes geschrieben :

Zitat:

Nur mal so: Das Problem tritt bspw. auch auf, wenn man den MS-XML-Parser in einer Konsolen- oder nonVCL-Anwendung benutzen will
Da drängt sich mir nun folgende Frage auf :
Für Access-2000-Datenbanken beispielsweise ist eine der Systemvoraussetzungen das Vorhanden sein von MS ADO >= 2.5

Wie sieht's aus, wenn ich den Delphi-XML-Parser einsetze ?

Muss da ebenfalls ADO >= 2.5 enthalten sein, oder hat das eine mit dem anderen nichts zu tun ?

Wenn ich beim xml-Parser dieselbe "manuelle Initialisierung" vornehmen muss (und das muss ich wirklich, genau wie M.Simmack es oben beschrieben hat, das hatte ich zwischenzeitlich auch mal ausprobiert) dann liegt für mich die Vermutung nahe, dass dieser Parser auch auf dieselben Systemresourcen zugreift, daher auch meine Frage nach den Systemvoraussetzungen für denn Fall, dass ich tatsächlich den XML-Parser in meine NON-VCL-Anwendung einbauen sollte...


Alle Zeitangaben in WEZ +1. Es ist jetzt 03:47 Uhr.

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