Beide Quelltexte sind so nicht korrekt, da sie nicht unter allen Delphiversionen funktionieren.
Korrekt wäre:
Delphi-Quellcode:
{$IFDEF UNICODE}
function Shellexecute(hWnd: HWND; Operation, FileName, Directory: PWideChar; ShowCmd: Integer): HINST;
stdcall;
external '
shell32.dll'
name '
ShellExecuteW';
{$ELSE}
function Shellexecute(hWnd: HWND; Operation, FileName, Directory: PAnsiChar; ShowCmd: Integer): HINST;
stdcall;
external '
shell32.dll'
name '
ShellExecuteA';
{$ENDIF}
procedure TForm1.Button1Click(Sender: TObject);
begin
Shellexecute(Form1.Handle, '
open', '
Notepad.exe',
nil,
nil, SW_NORMAL);
end;
Denn PChar ist je nach Delphiversion PAnsiChar oder PWideChar. Deshalb ist es falsch den Metatyp PChar bei
API-Deklarationen zu benutzen.
Wenn die oben geposteten Quelltexte unter Delphi 2009 oder höher benutzt würden, würde es einen Fehler geben, da nur das erste Zeichen an die
Ansi-deklarierte Funktion übergeben würde.