BufPos: Cardinal;
BufEnd: Cardinal;
BufPtr: PChar;
OpenFunc: Pointer;
InOutFunc: Pointer;
FlushFunc: Pointer;
CloseFunc: Pointer;
UserData: array[1..32] of Byte;
Name: array[0..259] of Char;
Buffer: TTextBuf;
end;
Handle保存文件的句柄(当文件打开时)。
Mode字段能被赋予下列值之一
const
fmClosed = $D7B0;
fmInput = $D7B1;
fmOutput = $D7B2;
fmInOut = $D7B3;
这里,fmClosed表示文件已经被关闭,fmInput和fmOutput表示打开了(reset)一个文本文件(fmInput)或创建并打开了(rewritten)一个新文本文件(fmOutput),fmInOut表示打开或创建了一个类型或无类型文件。任何其它的值表示文件变量还没有被赋值(因此没有被初始化)。
用户定义的写入例程使用UserData字段来存储数据。
Name字段保存文件名,它是一个以0字符(#0)结尾的字符序列。
对类型文件和无类型文件,RecSize包含记录的长度(字节),Private字段(?)没有使用但是保留的。 对文本文件,BufPtr是指向一个缓冲区的指针,缓冲区的大小由BufSize说明,BufPos是缓冲区中下一个要读写的字符的索引,BufEnd是缓冲区中有效字符的数目。OpenFunc、InOutFunc、FlushFunc和CloseFunc是指向I/O例程的指针,请参考Device functions。Flags决定了换行风格,像下面所示: bit 0 clear(清除0位) LF line breaks(换行)
bit 0 set(设置0位) CRLF line breaks(回车换行)
Flags其它所有的位被保留以备将来使用。请参考DefaultTextLineBreakStyle和SetLineBreakStyle。 Procedural types(过程类型)
过程指针存储为一个指向过程或函数入口点的32位指针;方法指针存储为一个指向方法入口点的32位指针,后面还跟一个指向对象的32位指针。
- 158 -
Memory management
Class types(类类型)
类类型的值存储为一个32位的指针,它指向一个类的实例,我们称它为对象。对象的内部数据结构就象一个记录,它的字段以声明的顺序进行存储,就象一系列连续的变量。对象的字段总是被优化排列,就象未压缩的记录类型。从祖先类继承下来的所有字段存储在新声明的字段之前。
每个对象的前4个字节是一个指针,它指向类的虚方法表(VMT)。每个类有一个虚方法表,而不是每个对象有一个。不同的类类型,不管多么相似,都不会共用VMT。VMT由编译器自动创建,不能由程序直接操纵。指向VMT的指针,是由对象的构造函数自动存储的,也不能由程序直接操纵。
VMT的布局如下表所示。在正偏移方向,VMT包含一个由32位方法指针构成的列表,每个指针对应于类中用户定义的一个虚方法,方法指针的顺序和声明的顺序相一致,每个指针包含相应的虚方法的入口地址。这种布局和C++的虚表(v-table)以及COM兼容。在负偏移方向,
完成Object Pascal的内部实现。应用程序应该使用Tobject定义的方法来查询这一信息,
本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/jisuanjixue/article-23665-118.html
沃日
>相信