Erstmal 2 = ERROR_FILE_NOT_FOUND bzw. SE_ERR_FNF
und steht im Edit wirklich genau das Gleiche, wie vorher in der Konstante?
Beim Aufruf mit einer Variablen, die den selben Pfad
Dann hast du nicht nur die diesen einen Parameter getauscht.
das ist nicht das Selbe
Delphi-Quellcode:
iReturnVal := ShellExecute(0, nil, ..., nil, nil, 0);
iReturnVal := ShellExecute(0, 'open', ..., nil, nil, 0);
Delphi-Quellcode:
getmem(pDatei, 256); <<<< 256 Bytes
pDatei := StringToWideChar(sDatei, pDatei, 256); <<< 256 Chars
getmem(pDatei, 256 * SizeOf(Char));
ähhh
getmem(pDatei, MAX_PATH * SizeOf(Char));
nja
getmem(pDatei, (Length(sDatei) + 1) * SizeOf(Char));
Aber erstmal sind statische Buffer saublöd, (statisch = sich nicht an den Inhalt anpassend, vor allem wenn es zu klein sein könnte)
vor allem, da Microsoft seit Jahren versucht solchen Mist loszuwerden
https://learn.microsoft.com/de-de/wi...?tabs=registry
und irgendwelche Zahlen anstatt Konstanten sind noch unschöner.
Was sagt denn der Debugger,
zum Inhalt von pDatei?
Welche Delphi-Version?
Wenn nicht D2009 oder älter, dann selbst Schuld, wenn jemand (du) die Compilerwarnungen nicht liest.
https://www.delphipraxis.net/profile...le#csel_field5
Aber eignentlich würde ich eher solch unnützes Rumkopieren einfach lassen.
Delphi-Quellcode:
iReturnVal := ShellExecute(0, nil, PChar(sDatei), nil, nil, 0);
iReturnVal := ShellExecute(0, nil, PChar(DateiscEdit.Text), nil, nil, 0);