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;
Ein Therapeut entspricht 1024 Gigapeut.