以下是在网上收集的一些对无类型参数的说明.个人理解无类型变量就是一个指针.
象Delphi中function Read(var Buffer; Count: Longint): Longint; override;象Buffer这样没有类型的参数究竟应该怎么给参数????
这说明Buffer是通过地址方式传递的,一般说来只要是一段内存区域就行。
var Buffer; const buffer;
这些没类型说明的形参说明是取地址的首地址。
类型 首地址
string string[1]
char 自己
integer 自己
record 自己
array arr[0]
pchar pchar()^
pointer pointer()^
otherPointer otherPointer()^ PInteger()^之类的
一般用首地址的方法或函数除了首地址外,都有一人count的参数,一般我们用
length(string), sizeof(record), sizeof(type) * lengh
如果你在写reocord中有string,请为它分配内存: string[len], or str: array[0..len] of char
Buffer1:Array of char;
Buffer2:Array [0..2048] of char;
Buffer1 和 Buffer2 在使用上是没有区别的,如:
Buffer1[10] 和 Buffer2[10]等价—-char 类型
Buffer1 和 Buffer2等价 ———-pointer 类型
所以:
Var Buffer:Array of char;
…
FileStream.Read(Pointer(Buffer),FILEStream.Size);
….
应该改为:
FileStream.Read(Buffer,FILEStream.Size);
同理
Var Buffer:String;
…
FileStream.Read(Pointer(Buffer),FILEStream.Size);
…
应该改为:
FileStream.Read(Buffer,FILEStream.Size);
var表示变参,即在函数中可以改变其值并且返回到调用过程中
var buf就是不指定类型的变参,不管你传入什么类型,函数中一律将其作为字节来对待,
比如传入DWORD,就是4个字节,函数中不知道是DWORD,所以必须用bufsize告诉它是4个字节
这样明白?
相当于让你优雅的传递一个数据指针,基本上接受这类参数的行为大部分就是内存处理,无需理会或在意传进来的数据格式,或者参数的格式预先就知道,只是为了方便。