Sie benötigen zwei separate Projekte, eine für die DLL selbst und einen für das Projekt, das das DLL verwendet.
Im DLL-Projekt verwenden Sie exports
, zB:
library my;
uses
Shellapi;
{$R *.res}
procedure ExecuteFile(FileName: WideString); stdcall;
begin
ShellExecuteW(0, nil, PWideChar(FileName), nil, nil, SW_NORMAL);
end;
exports
ExecuteFile;
begin
end.
Dann im raubend Projekt verwenden Sie eine external
Erklärung die Funktion aus der DLL zu importieren, zB:
procedure ExecuteFile(FileName: WideString); stdcall; external 'my.dll';
Dann kann das Projekt ExecuteFile()
wie jede andere Funktion aufrufen, zB:
So stellen Sie sicher, dass der Export von DLL ist:
befindet sich irgendwo auf der OS's search path, vorzugsweise im selben Ordner wie die raubend App.
kompiliert, um die gleiche Bitness (32bit oder 64bit) wie das konsumierende Projekt zu verwenden.
Andernfalls wird es nicht korrekt geladen.
Was speziell * nicht funktioniert * bedeuten? Wir können Ihren Bildschirm von hier aus nicht sehen. In welcher Weise ** speziell ** funktioniert ** nicht **? –
Es sieht so aus, als ob Sie zwischen "external" und "exports" verwirrt sind. –
Welche Version von Delphi verwenden Sie auch? 'ExecuteFile()' nimmt einen 'WideString' (warum?) Als Eingabe, also sollten Sie' ShellExecuteW() 'mit' PWideChar' aufrufen, um zu passen. 'ShellExecute()' wird nicht 'ShellExecuteW()' zugeordnet, und 'PChar' wird nicht' PWideChar' zugeordnet, es sei denn, Sie verwenden Delphi 2009+. –