On 1-2-2011 23:51, Bo Berglund wrote:
On Tue, 01 Feb 2011 23:33:58 +0100, Marc Weustink <[email protected]> wrote:Just tested: program MoveTest; {$mode objfpc}{$H+} uses SysUtils; var S: String; I: Integer; P: Pointer; begin S := 'Bla'; S := S + S; P := @I; Move(S[1], P^, SizeOf(I)); WriteLn(Format('%x %x %x %x %8.8x', [Ord(S[1]), Ord(S[2]), Ord(S[3]), Ord(S[4]), i])); end. $ ./movetest 42 6C 61 42 42616C42My code is a bit more complex because I want to be able to read and write different types of variables to the buffer handler. As an example I have the case of a string variable. To write it into the buffer I use this overloaded write: function TSSCommBuf.Write(const Source: string): boolean; begin Result := Write(@Source[1], Length(Source)); end; and for a Cardinal argument I use this: function TSSCommBuf.Write(const Source: Cardinal): boolean; begin Result := Write(@Source, SizeOf(Source)); end; both of which then calls the main Write: function TSSCommBuf.Write(Source: Pointer; Count: Cardinal): boolean; var b: byte; //For debugging, will be removed later Dst: Pointer; //Suggestion from Marc Weustink begin Result := false; //Check buffer size and grow if needed if (FBufSize - FWriteIndex)< Count then ExpandBuffer(FWriteIndex - FBufSize + Count); Dst := @FBuf[FWriteIndex]; Move(Source, Dst^, Count); // Source and Dst are pointers b := FBuf[FWriteIndex]; //To check what actually was written FWriteIndex := FWriteIndex + Count; Result := true; end; When I call the Write method with a string argument I get first to the small overloaded function, which unifies the arguments and calls the main Write. But when I test this with the string containing the single char #6 then the value that actually gets written is #64.... So somehow I am missing something important here...
Move expects 2 untyped parameters, so dereference your pointers Move(Source^, Dst^, Count); // Source and Dst are pointers Marc -- _______________________________________________ Lazarus mailing list [email protected] http://lists.lazarus.freepascal.org/mailman/listinfo/lazarus
