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