此网站:http://www.drbob42.com/delphi/wizards.htm
在底部显示了一个非常令人费解的代码
unit ShareMem;
{ (c) 1997 by Bob Swart (aka Dr.Bob - http://www.drbob42.com }
interface
const
...
uses
Windows;
const
Handle: THandle = 0;
...
function GetCommandLine: PChar; stdcall;
external 'kernel32.dll' name 'GetCommandLineA';
...
begin
Handle := LoadLibrary('BCBMM.DLL');
end.
这怎么可能?
答案 0 :(得分:6)
Delphi有一个称为可分配的consts,允许分配const值。这可以通过编译器指令和开关打开/关闭。如需更长的答案,请参阅here。
有时在课程属性可能之前,它会派上用场。即使const在函数内声明,它也会在调用之间保持其值。
procedure Test;
{$WRITEABLECONST ON}
const
AssignableConst: Integer = 0;
{$WRITEABLECONST OFF}
begin
AssignableConst := AssignableConst + 1;
WriteLn('Test is called ' + IntToStr(AssignableConst) + ' times');
end;
答案 1 :(得分:4)
默认情况下输入const
(编辑:正如评论中的Rob所述,这已被更改为不再是多年前的默认值),更像是一个静态变量。 You can turn this behavior off with a compiler directive
这在旧版本的Delphi中通常用作class/static properties的替代品。现在Delphi实际上有这个功能,没有充分的理由去做这个恕我直言。
答案 2 :(得分:1)
你想知道的是writable typed constant。从Turbo Pascal的旧时代开始,键入的常量是可写的。事实上,这是声明初始化变量的唯一方法。在内部,可写类型常量和初始化变量是等效的,都进入DATA
段(这就是 Lars Truijens 的示例如何工作)。此外,类型常量可以包含不允许真正常量的数据类型,它们的真正语义目的是什么。自Delphi 4(或3甚至?)以来,Borland想出了将常量和变量混合在一起的奇怪之处,并引入了初始化全局变量和$WRITEABLECONST
switch指令(默认情况下为OFF)。初始化变量不能出现在本地范围内,因此仍然存在可写类型常量的目的。