Einzelnen Beitrag anzeigen

schwa226

Registriert seit: 4. Apr 2008
400 Beiträge
 
#1

Aufbau einer Funktion für mehrere Anwendungsmöglichkeiten

  Alt 10. Mär 2011, 08:27
Klingt etwas komisch, weiß aber nicht wie ich es besser ausdrücken soll

Ich brauche eine Funktion die das kann:
1. Senden eines Commands (Array[0..4] of Byte)
2. Senden eines Commands (Array[0..4] of Byte) und senden von Data (Array of Byte)
3. Senden eines Commands (Array[0..4] of Byte) und empfangen von Data (Array of Byte)

Ich möchte es Typenlos machen um Arrays of Byte oder TBytes oder PByteArrays übergeben zu können.

Mein Ansatz ist zuerst einmal dieser gewesen:
function SendCommand(const Command; var Data) : Boolean; Dies deckt einmal Variante 2. ab.
Bei Variante 1. scheitere ich nun da ich trotzdem einen Parameter für Data übergeben muss.

Ein Overload geht ja auch so nicht, da Variante 2 & 3 dann nicht auseinander gehalten werden kann.
Der Kompiler meckert auch bei:
Delphi-Quellcode:
      function SendCommand(const Command; const Data) : Boolean; Overload;
      function SendCommand(const Command; var Data) : Boolean; Overload;
Auch ein Aufruf von SendCommand(CMD[0], nil); geht nicht, da nil nicht als var Parameter übergeben werden kann.

Oder sollen Typenlose Parameter generell vermieden werden?
Dazu müsste ich mich halt auf einen Type festlegen. Hier wär das PByteArray wohl am besten.

Dann könnte es so aussehen:
Delphi-Quellcode:
      function SendCommand(
            const Command : PByteArray;
            const InData : PByteArray = nil;
            var OutData : PByteArray = nil
            ) : Boolean;
Geht nicht weil nil nicht als var übergeben werden kann!
Muss ich bei einem PByteArray überhaupt den Parameter als var übergeben?
Ich ändere ja eigentlich nicht den Pointer des Arrays sondern dessen Inhalt.

Also so: ?
Delphi-Quellcode:
      function SendCommand(
            const Command : PByteArray;
            const InData : PByteArray = nil;
            const OutData : PByteArray = nil
            ) : Boolean;
Delphi 2010, Update 4 & 5
  Mit Zitat antworten Zitat