【问题标题】:Export function of ShellExection to DLL delphi [closed]ShellExection的导出功能到DLL delphi [关闭]
【发布时间】:2017-11-20 22:55:33
【问题描述】:

如何将此函数 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';

【问题讨论】:

  • 不起作用具体是什么意思?我们无法从这里看到您的屏幕。 具体在什么方面不起作用
  • 您似乎对externalexports 感到困惑。
  • 另外,您使用的是什么版本的 Delphi? ExecuteFile()WideString(为什么?)作为输入,因此您应该使用 PWideChar 调用 ShellExecuteW() 来匹配。 ShellExecute() 不映射到 ShellExecuteW()PChar 不映射到 PWideChar,除非您使用的是 Delphi 2009+。

标签: delphi dll shellexecute


【解决方案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 位)。

否则将无法正确加载。

【讨论】:

  • 成功了。他不知道这个其他功能。我正在使用从我正在设计的 SDK 到 DLL 的导出对。谢谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-08-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多