Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Byte-Array per PByte übergeben (https://www.delphipraxis.net/145190-byte-array-per-pbyte-uebergeben.html)

MisterNiceGuy 25. Dez 2009 20:10


Byte-Array per PByte übergeben
 
Hi, ich möchte einer Funktion einen Bytearray per PByte übergeben und dann als Array behandeln.
Hier meine Funktion:

Delphi-Quellcode:
function blubb(a:pbyte):integer;
begin
  a^[0] := 1;
end;
Jetzt bekomm ich aber einen Fehler in der Zeile, der besagt, dass ein Arraytyp erwartet wird.
Kann mir jemand helfen?

mleyen 25. Dez 2009 20:13

Re: Byte-Array per PByte übergeben
 
Delphi-Quellcode:
type
  PByte = ^Byte; // dies ist so definiert

// Was du suchst sollte so aussehen:
  ByteArr = array of Byte;
  PByteArr = ^ByteArr;
Ansonsten, falls du echt PByte bekommst, caste einfach nach PByteArr, ala PByteArr(a). :thumb:

MisterNiceGuy 25. Dez 2009 20:16

Re: Byte-Array per PByte übergeben
 
Hi Marcel, danke aber das bringt mich nicht wirklich weiter! Was ich brauche ist eine Lösung wie die eine Zeile die ich modifiziert habe
korrigiert werden kann sodass sie funktioniert. Ich kann leider nicht den Parameter oben ändern.

mleyen 25. Dez 2009 20:21

Re: Byte-Array per PByte übergeben
 
Siehe mein Edit.

Delphi-Quellcode:
function blubb(a:pbyte):integer;
begin
  PByteArr(a)^[0] := 1;
end;

MStoll 25. Dez 2009 20:24

Re: Byte-Array per PByte übergeben
 
Hi,

da aber dynamische Arrays bereits Pointer sind, schlage ich das vor:

Delphi-Quellcode:
function blubb(a:pbyte):integer;
begin
  TByteArr(a)[0] := 1;
end;
Ich benutze es in ähnlicher Weise selbst für das Sortieren beliebiger Array-Typen, wenn ich einfach nur nen Pointer als formalen Parameter in der Vergleichs-Funktion habe. Siehe dazu auch den Beitrag zu Shellsort für beliebige Arrays in der Code-Lib.

Gruß
Michael

[Edit] Du kannst dir type TByteArr = array of Byte auch zwischen dem Funktions-Kopf und begin lokal definieren, wenn das in deinem Fall sinnvoll ist. [/Edit]

MisterNiceGuy 25. Dez 2009 20:44

Re: Byte-Array per PByte übergeben
 
Ah das hilft, vielen Dank euch beiden :)


Alle Zeitangaben in WEZ +1. Es ist jetzt 14:14 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