Einzelnen Beitrag anzeigen

Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.320 Beiträge
 
Delphi 12 Athens
 
#82

Re: Pegasus: Luckies persönliches Synchronisationstool

  Alt 7. Aug 2006, 12:26
Duhu Luckie,

hab mir och ma deinen Pegasus angeguckt und irgendwie läuft da was nich so, wie soll bestimmt soll.

Isch kann of die Verzeichnisbuttons rumklicken wie isch will, aber nüschts passiert.


Nagut, also hab'sch ma selber kompiliert, nachgeguckt und siehe da ... CoInitialize(nil) liefet S_FALSE und wenn es dat macht, machst du überhauptnüschts ... nichma 'ne Fehlermeldung hast'e für mich. *eingeschnapptsei*


So läuft es ^^
Delphi-Quellcode:
var
  CoInit: Boolean;
begin
  Result := false;

  CoInit := CoInitialize(nil) = S_OK;
  try
    ...
  finally
    if CoInit then CoUninitialize;
  end;

Hier ma ä leicht verständliches Beispiel:
Delphi-Quellcode:
program Project1;

uses Windows, SysUtils, ActiveX;

var CoInit1, CoInit2: Boolean;

begin
  CoInit1 := CoInitialize(nil) = S_OK;
  try

    CoInit2 := CoInitialize(nil) = S_OK;
    try
      MessageBox(0, PChar('CoInit1=' + BoolToStr(CoInit1, True)
        + ', CoInit2=' + BoolToStr(CoInit2, True)), '', 0);
    finally
      if CoInit2 then CoUninitialize;
    end;

  finally
    if CoInit1 then CoUninitialize;
  end;
end.
Man kann nur einmal initialisieren (jedenfalls bei mir > D7 + WinXP SP2).

Und da es über TApplication.Initialize schonmal aufgerufen wurde ...

Delphi-Quellcode:
procedure TApplication.Initialize;
begin
  if InitProc <> nil then TProcedure(InitProc);
end;
InitProc zeigt auf InitComObj, wo entweder CoInitializeEx oder CoInitialize ofjerufen wird.

Mann ohh mann, da such man sich dumm und dusslig und dann isses da, wo man hätte als erstes nachsehen können/sollen.
Code:
//ComObj.pas ... die von D7
initialization
  ...
  if not IsLibrary then
  begin
    SaveInitProc := InitProc;
    [color=clRed]InitProc := @InitComObj;[/color]
  end;

Und dat hier...
Zitat:
---------------------------
Pegasus.exe - Fehler in Anwendung
---------------------------
Die Ausnahme "Unbekannter Softwarefehler" (0x0eedfade) ist in der Anwendung an der Stelle 0x7c81eb33 aufgetreten.


---------------------------
OK Abbrechen
---------------------------
es macht sich besonders gut, wenn sich (noch) nichts in der ListView1 befindet
Delphi-Quellcode:
procedure TForm1.ListView1DblClick(Sender: TObject);
var
  s: String;
begin
  s := ListView1.Items[Listview1.ItemIndex].Caption;
  ShellExecute(Handle, 'open', PChar(s), nil, nil, SW_SHOWNORMAL);
end;
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat