gpt4 book ai didi

delphi - 在 Delphi XE5 组件内声明 DLL

转载 作者:行者123 更新时间:2023-12-03 15:51:37 25 4
gpt4 key购买 nike

我正在 Delphi 中创建一个新组件,它实例化一个 DLL

Unit UMyComponent

interface

type
TMyComponent = class(TComponent)
...
procedure MyDllCall;
end;

procedure Register;

implementation

function MyDll: Longint; stdcall; external 'MyDllName.dll' name 'MyFunction'

procedure TMyComponent.MyDllCall;
var
res: LongInt;
begin
res:= MyDll;
end;

...

procedure Register;
begin
RegisterComponents('My Tab', [TMyComponent]);
end;

end.

我有 2 个问题:

  1. 当我在 IDE 上安装该组件时,它会搜索物理 DLL,如果在路径中找不到它,则会给出错误。我希望组件在运行时有效使用时查找它。
  2. 是否可以在运行时设置dll库文件名?即:“MyDllName.dll”可以更改为“10029.dll”或“ajjdwawd.dll”

请注意,我将 DLL 声明放在实现中,以免将函数调用暴露给调用者。

感谢您的回答。

最佳答案

您当前的代码使用所谓的 load-time linking 。模块加载时必须解决依赖关系,否则会加载失败。您需要使用替代方法 run-time linking .

在 Delphi 中,有两种方法可以做到这一点:

  • 通过调用LoadLibraryGetProcAddressFreeLibrary直接使用Win32。
  • 使用 delayed 关键字让 Delphi RTL 为您执行此操作。

文档中更详细地介绍了这两种方法:

关于delphi - 在 Delphi XE5 组件内声明 DLL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41587468/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com