Delphi中的"本地"指令

kli*_*ing 20 delphi

我坐在调试一些代码,我在SysUtils.pas中偶然发现了这一行:

procedure ConvertError(ResString: PResStringRec); local;
Run Code Online (Sandbox Code Playgroud)

local关键字到底做了什么?似乎ConvertError函数没有在文件的接口部分声明,这只是澄清该函数确实是本地的,或者使用此指令除此之外是否有实际好处?

Dav*_*nan 16

它可以追溯到Linux编译器Kylix.以下是我在Delphi 6语言指南中可以看到的内容,第9-4页:

指示例程不可导出的指令local是特定于平台的,在Windows编程中没有任何作用.

在Linux上,local指令为编​​译到库中但不导出的例程提供了轻微的性能优化.可以为独立过程和函数指定该指令,但不能为方法指定.用local声明的例程- 例如.

function Contraband(I: Integer): Integer; local;
Run Code Online (Sandbox Code Playgroud)

- 不要刷新EBX寄存器

  • 无法从库中导出.
  • 不能在单元的接口部分声明.
  • 不能将其地址记录或分配给过程类型变量.
  • 如果它是纯汇编程序,除非调用者设置EBX,否则不能从另一个单元调用.

  • 这是关于本地指令的embarcadero文档的[链接](http://docs.embarcadero.com/products/rad_studio/radstudio2007/RS2007_helpupdates/HUpdate4/EN/html/devcommon/dynamicallyloadedlibs_xml.html). (2认同)
  • 啊,好旧的"本地"和EBX GOT指针调用约定.关于Linux的一些事情我不会错过...... (2认同)