I am a bit confused over the way to specify parameters to function calls as var or not....
I have the following constructs: type TByteArr = array of byte; I have a buffer class that receives data from a serial port and now I want to extract data from this buffer to various types of variables in the main application class. So far I have managed all the simple variable types successfully, the only remaining part is the handling of a body of varying length of data. In my main class the data will wind up in a dynamic array of bytes (TByteArr as above). In the main class: function xxxx.GetData(Dest:TByteArr): boolean; <== ???? ....calculate length of data in bytes as Len.... SetLength(Dest, Len); if not FRxBuf.Read(Dest) then exit; .... In the buffer class I have a number of overloaded Read functions: function Read(Dest: Pointer; Count: Cardinal): Cardinal; overload; function Read(var Data: TByteArr): boolean; overload; ... and 5 more.... implemented as: function TSSCommBuf.Read(var Data: TByteArr): boolean; // <== ??? begin Result := Read(@Data, SizeOf(Data)) = SizeOf(Data); end; function TSSCommBuf.Read(Dest: Pointer; Count: Cardinal): Cardinal; var num: Cardinal; Src: Pointer; begin num := FWriteIndex - FReadIndex; //Remaining data bytes in buffer if num >= Count then num := Count; if num > 0 then begin Src := @FBuf[FReadIndex]; // FBuf is a TByteArr sized on demand Move(Src^, Dest^, num); FReadIndex := FReadIndex + num; end; Result := num; end; My question concerns the lines marked with <== ??? Do I use var in the declaration or not? As you can see the similar functions are differently written now. In Delphi I think that if an object or a dynamic array is passed as argument it does not need the var declaration, but I am not sure. I want to treat the array as a variable because it is the return container for the data. Bo Berglund _______________________________________________ fpc-pascal maillist - fpc-pascal@lists.freepascal.org http://lists.freepascal.org/mailman/listinfo/fpc-pascal