Einzelnen Beitrag anzeigen

Benutzerbild von Dalai
Dalai

Registriert seit: 9. Apr 2006
1.680 Beiträge
 
Delphi 5 Professional
 
#1

IShellLink SetPath gibt E_INVALIDARG zurück

  Alt 20. Jun 2015, 19:21
Hallo ihr .

Da ich (mal wieder) nichts Passendes zu meinem Problem finde, bitte ich euch erneut um Hilfe.

Gegeben sei folgender Code:
Delphi-Quellcode:
uses ShlObj, ActiveX, ComObj;

const
  IID_IPersistFile: TGUID = (
    D1:$0000010B;D2:$0000;D3:$0000;D4:($C0,$00,$00,$00,$00,$00,$00,$46));

var
  FShellLink: IShellLink;
  FPersistFile: IPersistFile;

var Lfile: string;
begin
  OleCheck(CoCreateInstance(CLSID_ShellLink, nil, CLSCTX_INPROC_SERVER,
  {$IFDEF UNICODE}IID_IShellLink{$ELSE}IID_IShellLinkA{$ENDIF}, FShellLink));
  OleCheck(FShellLink.QueryInterface(IID_IPersistFile, FPersistFile));
  Lfile:= 'blub.exe';
// Lfile:= 'C:\blub.exe';
// Lfile:= '.\blub.exe';
  OleCheck(FShellLink.SetPath(PChar(Lfile)));
end;
FShellLink und FPersistFile sind eigentlich in einer Klasse deklariert, aber darum soll es nicht gehen. Die Methode SetPath wirft immer E_INVALIDARG (0x80070057) raus, wenn man einen Dateinamen ohne Pfad im Funktionsparameter übergibt [ADD], und diese Datei nicht existiert (auch nicht im %PATH%) [/ADD]. Steht in dem Parameter ein Laufwerk oder ein relativer Pfad (kommentierte Zuweisungen an Lfile oben), ist alles in Ordnung. Und das obwohl es die Datei in KEINEM der o.g. Fälle gibt.

Kann sich - oder besser noch mir - das jemand erklären?

MfG Dalai

Geändert von Dalai (20. Jun 2015 um 22:48 Uhr)
  Mit Zitat antworten Zitat