加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

delphi – 为什么我可以多次导出相同的函数?

发布时间:2020-12-15 04:34:37 所属栏目:大数据 来源:网络整理
导读:当我多次从库中导出过程ha时: library hahaha;procedure ha; begin Writeln('ha') end;exports ha,ha,ha; end. Delphi用三个程序巧妙地创建了一个.dll: 我很惊讶,模糊调用GetProcAddress(LoadLibrary(‘hahaha.dll’),’ha’)并没有失败. 这让我想知道:这
当我多次从库中导出过程ha时:
library hahaha;

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

exports
  ha,ha,ha;    
end.

Delphi用三个程序巧妙地创建了一个.dll:

我很惊讶,模糊调用GetProcAddress(LoadLibrary(‘hahaha.dll’),’ha’)并没有失败.

这让我想知道:这是否有用?

解决方法

一个有用的地方是当你想用不同的名字多次导出函数时.例如,如果我们试图在Delphi中重新实现user32,我们可能会有这样的导出:
exports
  SetWindowTextA,SetWindowTextA name 'SetWindowText';

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

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

>他们没有考虑那个案子,或者
>他们认为并确定阻止多个同名进口所涉及的努力无法提供足够的好处来证明开发成本合理.

至于使用已多次导出的函数名调用GetProcAddress时会发生什么情况,系统将返回名称匹配的第一个导出函数.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读