On 1-2-2011 23:11, Bo Berglund wrote:
On Tue, 1 Feb 2011 21:18:57 +0100, Burkhard Carstens<[email protected]>
wrote:
Am Dienstag, 1. Februar 2011 21:03 schrieb Bo Berglund:
I think I have made an error.....
I have created a generalized buffer handler for my project and here I
have this function to read data from the buffer.
function TSSCommBuf.Read(Dest: Pointer; Count: Cardinal): Cardinal;
var
num: Cardinal;
begin
num := FWriteIndex - FReadIndex; //Remaining data bytes in buffer
if num>= Count then
num := Count;
if num> 0 then
begin
Move(FBuf[FReadIndex], Dest, num);
didn't read further, but: try Dest^ ..
(quick guess)
Did not work, but I am using Move() in a way that has worked for me
using Delphi for many years, so it may have to do with Delphi vs fpc
differences....
Also in Delphi you must use Dest^, otherwise you are overwriting your
pointer. (unless they have some overloaded Move)
What I usually do is the following:
Move(Source, Dest, Count);
where normally Source is an array, for example a string and Dest is
for example a multi-byte variable:
Move(SrcArr[Index], DestVar, SizeOf(DestVar);
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 42616C42
Marc
--
_______________________________________________
Lazarus mailing list
[email protected]
http://lists.lazarus.freepascal.org/mailman/listinfo/lazarus