如何将此函数ExecuteFile从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';
答案 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为:
位于OS's search path的某个位置,最好与消费应用在同一文件夹中。
编译为使用相同的位(32位或64位)作为消费项目。
否则,它无法正确加载。