gpt4 book ai didi

delphi - 为什么同一个函数可以导出多次?

转载 作者:行者123 更新时间:2023-12-03 14:59:19 26 4
gpt4 key购买 nike

当我多次从库中导出过程 ha 时:

library hahaha;

procedure ha;
begin
Writeln('ha')
end;

exports
ha, ha, ha;
end.

Delphi 用三个过程巧妙地创建了一个 .dll: enter image description here

令我惊讶的是,不明确的调用 GetProcAddress(LoadLibrary('hahaha.dll'), 'ha') 没有失败。

这让我想知道:这在某些情况下有用吗?

最佳答案

当您希望使用不同的名称多次导出函数时,此功能很有用。例如,如果我们尝试在 Delphi 中重新实现 user32,我们可能会进行如下导出:

exports
SetWindowTextA,
SetWindowTextA name 'SetWindowText';

在您的情况下,您使用相同的名称和不同的序数值多次导出相同的函数。你为什么想这么做?我看不出有什么充分的理由想要这样做。但是,为什么编译器要阻止你这样做呢?编译器开发人员需要付出努力才能做到这一点,那么会得到什么好处呢?

因此,我的猜测是,编译器开发人员没有在具有相同名称的多个导出上实现 block ,因为:

  1. 他们没有考虑这种情况,或者
  2. 他们考虑了这一点,并确定阻止多个同名导入所涉及的努力不会提供足够的好处来证明开发成本的合理性。

当您使用已多次导出的函数名称调用GetProcAddress时,系统将返回名称匹配的第一个导出函数。

关于delphi - 为什么同一个函数可以导出多次?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29215281/

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