2013-04-02 26 views
20

我坐在调试一些代码,我偶然发现这一行SysUtils.pas:的“本地”指令德尔福

procedure ConvertError(ResString: PResStringRec); local; 

是什么地方的关键字做什么呢?看起来ConvertError函数没有在文件的接口部分声明,这只是一个澄清,该函数确实是本地的,或者除了那个使用这个指令是否有实际好处?

+3

看来,该指令确保接口中没有声明(否则会导致编译时错误)。有趣... –

+0

您是否尝试阅读关键字的文档? – wRAR

+2

@wRAR我碰到了f1,但内置的文档找不到它。然后我检查了谷歌,并没有提出什么,在这里我们;) – kling

回答

16

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

该指令当地,这标志着程序不可用用于出口,是特定于平台的,并在Windows编程中没有任何影响。

在Linux上,本地指令为编译到库中但未导出的例程提供轻微的性能优化。该指令可以指定为独立的程序和函数,但不适用于方法。例如,用本地声明的例程。

function Contraband(I: Integer): Integer; local; 

- 不刷新EBX寄存器,因此

  • 不能从库中导出的。
  • 不能在接口部分声明单位。
  • 不能将其地址作为或分配给程序型变量。
  • 如果它是纯粹的汇编程序,则不能从另一个单元调用,除非调用者设置了EBX。
+0

非常好,正是我在找的!谢谢! – kling

+2

这里是关于本地指令的embarcadero文档[链接](http://docs.embarcadero.com/products/rad_studio/radstudio2007/RS2007_helpupdates/HUpdate4/EN/html/devcommon/dynamicallyloadedlibs_xml.html)。 – RRUZ

+0

@RRUZ我还发现,通过在我的答案中输入文字!德尔福2007年。老套。 –