Hallo Leute,
ich habe vor geraumer Zeit eine
COM-Port Komponente auf das neue Delphi 2010 umgestellt und bisher hat sie auch gut funktioniert bis jetzt. Es ist ein Fehler aufgetreten den ich mir nicht erklären kann. Wenn ich einen String der zum Beispiel '$PFAL,Sys.Cnf.Reset' so aus sieht sende macht er alles wie er es soll. Aber wenn der String
'$PFAL,CNF.Set,AL14=GPS.Nav.sSpeed>=1&sys.timer.e0 &Sys.Timer.s4=inactive&Sys.Timer.s5=running:GPS.Hi story.Write,0,"&(IMEI),B:,10,1,,,,,&(Can3),,,,,C:, 11,4,0,7,4,,&(Can10),&(Can9),,,,,,E:,6,1,&(speed.c mps),&(Fieldstrength),&(Alt),&(DOP),&(SatsUsed),"'
so aus sieht.
Dann schneidet er beim senden den mittel Teil heraus. Das einzige was eine Erklärung dafür wäre ist das die Länge des Pointers nicht korrekt ist, die ich vorher berechne.
Hier ist die Funktion die ich zum senden benutze:
Delphi-Quellcode:
function TCommPortDriver.SendString( s: AnsiString ): boolean;
var
DataPtr: Pointer;
Size: Cardinal;
begin
Result := False;
DataPtr := nil;
try
Size := Length( s ) + 1 * SizeOf( PAnsiChar );
GetMem( DataPtr , Size );
Move( PAnsiChar( s )^ , DataPtr^ , size );
Result := SendData( DataPtr, size ) = size;
finally
FreeMem( DataPtr , size );
DataPtr := nil;
end;
end;
Hat jemand hier eine Erklärung dafür?