Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Aufbau einer Funktion für mehrere Anwendungsmöglichkeiten (https://www.delphipraxis.net/158980-aufbau-einer-funktion-fuer-mehrere-anwendungsmoeglichkeiten.html)

schwa226 10. Mär 2011 08:27

Aufbau einer Funktion für mehrere Anwendungsmöglichkeiten
 
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:
Delphi-Quellcode:
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. :gruebel:

Also so: ?
Delphi-Quellcode:
      function SendCommand(
            const Command : PByteArray;
            const InData : PByteArray = nil;
            const OutData : PByteArray = nil
            ) : Boolean;

WM_CLOSE 10. Mär 2011 09:07

AW: Aufbau einer Funktion für mehrere Anwendungsmöglichkeiten
 
Wie wäre denn die übergabe eines Pointers? Dann müstest du den aber in der Methode immer Casten.
den kannst du dann auf standartmäßig auf nil setzten

schwa226 10. Mär 2011 09:16

AW: Aufbau einer Funktion für mehrere Anwendungsmöglichkeiten
 
PByteArray is ja eignetlich ein Pointer - nur das das Casten ausfällt und ich gleich auf den Inhalt der einzelenen Bytes zugreifen kann.

Ich habe es nun auf const PByteArray umgestellt. Es kann die PByteArray als konstante übergeben werden und trotzdem der Inhalt des Arrays verändern. Der Pointer auf das Array bleibt ja gleich...


Alle Zeitangaben in WEZ +1. Es ist jetzt 07:43 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz