Variant是一种可以自动在程序间甚至计算机间编组数据的Windows类型。
提倡使用Variant数组的一个重要原因是它能使二进制数据方便地在报务器上传进传出。
如果有一个二进制文件,比如WAV文件或者AVI文件,通过使用Variant数组,
可以在程序间或OLE服务器间把这些文件前传或后传。
function VarArrayCreate(Const Bounds: array of Integer
VarType: Integer): Variant;
procedure VarArrayRedim(var A:Variant
HighBound: Integer);
function VarArrayOf(const values: array of Variant): Variant;
可以通过函数VarArrayHighBound、VarArrayLowBound和VarArrayDimCount的使用查出数组
的维数,以及每一维的边界。用Variant数组工作会消耗相当数量的系统开销。
如果想快速处理数组,可以使用两个函数: VarArrayLock和VarArrayUnlock。
第一个例程将返回存储在数组中的数据指针。VarArrayLock取得一个Variant数组,
返回一个标准Pascal数组。使用这个例程工作时,该数组必须用一个标准类型清楚地进行声明,
标准类型包括Integer,Bool, String, Byte或者Float。Variant数组采用的类型
和Pascal数组采用的类型都必须是可识别的。
如果有一个固定的、尺寸易算的结构,那么可以很简单的把它存储在一个Variant数组中:
TDriveInfoRec = record
SectorsPerCluster, BytesPerSector: Cardinal;
NumberOfFreeClusters, TotalNumberOfClusters: Cardinal;
TotalFree, FreeAvailable, TotalSpace: LargeInt;
end;
var
ADrive: Variant;
TempVar: Variant;
TempPtr: Pointer;
begin
...//Code omitted here
TempVar := VarArrayCreate([0, SizeOf(TDriveInfoRec)], VarByte);
TempPtr := VarArrayLock(TempVar);
Move(DriveInfoRec, TempPtr^, SizeOf(TDriveInfoRec));
VarArrayUnlock(TempVar);
ADrive[2] := TempVar;
DriveInfo[TotalCount] := ADrive;
...//More Code omitted
end;