为什么在interface中定义过的函数在外部却看不见,没有定义过的反而看得见???(50分)

  • 主题发起人 主题发起人 zv2000
  • 开始时间 开始时间
Z

zv2000

Unregistered / Unconfirmed
GUEST, unregistred user!
有谁看过system单元吗?其中很多函数、过程在interface部分并没有声明,例如
Copy、New及Dispose等函数的,但有以下声明:
procedure _Copy{ s : ShortString
index, count : Integer ) : ShortString};
procedure _New;
procedure _Dispose;
在implementation中也只有
procedure _Copy{ s : ShortString
index, count : Integer ) : ShortString};
procedure _New{ size: Longint
typeInfo: Pointer};
procedure _Dispose{ p: Pointer
typeInfo: Pointer};
但是你敲 system. 却在列表中看不到 _Copy 等而能看到 Copy ,这是怎么会事?

为什么在interface中定义过的函数在外部却看不见,没有定义过的反而看得见???

在这些函数上有这样一行注释:
{ Procedures and functions that need compiler magic }
是什么意思呢?如果有什么魔法,我也想学习学习啊!
 
请注意在System.pas开头的这几行文字:

unit System
{ Predefined constants, types, procedures, }
{ and functions (such as True, Integer, or }
{ Writeln) do not have actual declarations.}
{ Instead they are built into the compiler }
{ and are treated as if they were declared }
{ at the beginning of the System unit. }

这个单元中定义了许多Pascal语言的标准成分,其中有很多成分被包含在编译器中,System.pas
只是挂个名而已。不信的话你看一看Integer和New、True的Hint,都是system.pas(11)。
一句话,编译器对这个单元进行了特殊的处理,不能用通常的方法进行分析。
 
看来这个“魔法”我是学不了的了!
creation-zy:你再看看我的另一个问题吧!

“能否不用变量名访问变量?”:
http://www.delphibbs.com/delphibbs/dispq.asp?lid=583197
 
后退
顶部