Delphi-PRAXiS
Seite 1 von 2  1 2      

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.


Alle Zeitangaben in WEZ +1. Es ist jetzt 11:10 Uhr.
Seite 1 von 2  1 2      

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