Hi
Da ich mich vor kurzem mal über die
Indy Komponenten geärgert habe, das man bei denen keinen Pointer angeben kann, um Daten zu senden, wollte ich einfach mal fragen, wie würde man sowas eigentlich dann in einer .NET Sprache handeln?
ich definiere mir immer meine Strukturen, die übers Netz gesendet werden sollen folgend
Delphi-Quellcode:
type
TTerminalTransferData = packed record
Cmd : Word;
Size : integer;
Crc : integer;
end;
PTerminalTransferData = ^TTerminalTransferData;
TTerminalInfo = packed record
Header : TTerminalTransferData;
Serial : TTINISerial;
ID : integer;
SWVer : integer;
end;
PTerminalInfo = ^TTerminalInfo;
wenn ich jetzt was versenden will, habe ich eine funktion, die einen PTerminalTransferData Pointer etgegen nimmt, und dann anhand der Size die CRC berechnet, und dann die Daten weiterschickt
Delphi-Quellcode:
function TTerminal.SendCmdToTerminal(Data : PTerminalTransferData; DoFreeData : Boolean) : Boolean;
begin
Result := FALSE;
try
Data^.Crc := CalcCRC32(Data, Data^.Size);
SendDataToTerminal(
IP, Data);
Result := TRUE;
finally
if DoFreeData
then FreeMem(Data, Data^.Size);
end;
end;
diese Funktion kann so mit allen Records umgehen, die den gleichen Header haben, und das sind alle, da der Header ja der Grudstock des Protokolles darstellt.
Wie löst man solche Aufgaben in .NET also ohne Pointer?