将ShellExection导出到DLL delphi

时间:2017-11-20 22:55:34

标签: delphi dll shellexecute

如何将此函数Exec​​uteFile从ShellExecute导出到DLL。如果我通过DLL调用它不起作用。但是,如果我在项目中直接使用ShellExecution它可以工作

procedure ExecuteFile(FileName:WideString);stdcall;
begin
  ShellExecute(0,nil,PChar(FileName),nil,nil,SW_NORMAL);
end;

procedure ExecuteFile(FileName:WideString);stdcall; external 'my.dll';

1 个答案:

答案 0 :(得分:1)

您需要两个单独的项目,一个用于DLL本身,另一个用于使用DLL的项目。

在DLL项目中,您使用exports,例如:

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.

然后,在使用项目中,使用external声明从DLL导入函数,例如:

procedure ExecuteFile(FileName: WideString); stdcall; external 'my.dll';

然后项目可以像任何其他函数一样调用ExecuteFile(),例如:

ExecuteFile('filename');

只需确保导出DLL为:

  1. 位于OS's search path的某个位置,最好与消费应用在同一文件夹中。

  2. 编译为使用相同的位(32位或64位)作为消费项目。

  3. 否则,它无法正确加载。