Einzelnen Beitrag anzeigen

Benutzerbild von jaenicke
jaenicke

Registriert seit: 10. Jun 2003
Ort: Berlin
9.648 Beiträge
 
Delphi 11 Alexandria
 
#5

AW: Funktion aus DLL einbinden

  Alt 22. Aug 2016, 09:28
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.dllname 'ShellExecuteW';
{$ELSE}
function Shellexecute(hWnd: HWND; Operation, FileName, Directory: PAnsiChar; ShowCmd: Integer): HINST; stdcall; external 'shell32.dllname '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.
Sebastian Jänicke
AppCentral
  Mit Zitat antworten Zitat