Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Pointer, Array, Funktion geht nicht (https://www.delphipraxis.net/136387-pointer-array-funktion-geht-nicht.html)

schwa226 29. Jun 2009 18:36


Pointer, Array, Funktion geht nicht
 
Hi,

komm einfach nicht drauf!

Ich habe eine Class mit einer public Funktion die so deklariert ist:
Code:
function TProgramFunctions.CalcResult(const data: PLongArray): boolean;
PLongArray ist so definert:
Code:
TLongArray = Array of Byte;
PLongArray = ^TLongArray;
nun binde ich die Class über create in meine uMain ein und mache z.B. folgendes:
Code:
procedure TForm1.Button1Click(Sender: TObject);
var test2: array [0..2] of byte;
begin

   teset2[0] := 123;
   teset2[1] := 47;
   teset2[2] := 85;

  ProgramCalc:= TProgramFunctions.Create;

  ProgramCalc.CalcResult(@test2);

end;
Ich übergebe somit ja den Pointer meines Arrays. Wenn ich aber nun in meiner CalcResult den Inhalt von data ansehe, steht immer "nicht verfügbarer Wert".

Warum?

DeddyH 29. Jun 2009 18:47

Re: Pointer, Array, Funktion geht nicht
 
Sind das nun Fehler beim Tippen, oder wieso heißt Dein Array beim Befüllen teset?

jaenicke 29. Jun 2009 18:53

Re: Pointer, Array, Funktion geht nicht
 
Zitat:

Zitat von schwa226
Ich übergebe somit ja den Pointer meines Arrays. Wenn ich aber nun in meiner CalcResult den Inhalt von data ansehe, steht immer "nicht verfügbarer Wert".

Erstens versuche es einmal mit data^ stattdessen, zweitens ist der Wert im Debugger ggf. nur verfügbar, wenn die Variable auch an der Stelle verwendet wird. Denn sonst wird das ggf. wegoptimiert.

Gibt es denn ein Problem auch bei der Verwendung im Programm?

schwa226 29. Jun 2009 19:03

Re: Pointer, Array, Funktion geht nicht
 
Natürlich Tippfehler!

Wenn ich die Funktion Aufraufe sind die 3 Werte drinnen.

Tut leid, aber wie mit data^?

In der Funktion def lässt es mich das nicht machen.

Wenn ich debugge ist von Anfang an nichts in Data drinnen.

Der Pointer wird richtig übergeben, zumindest Pointer vor auf ruf der Funktion = Pointer in der Funktion...

Dax 29. Jun 2009 19:06

Re: Pointer, Array, Funktion geht nicht
 
Array of byte <> array[0..2] of byte. Ersteres ist dynamisch, zweiteres immer drei Byte lang. Völlig inkompatibel, ohne sich schwer zu verbiegen...

Klaus01 29. Jun 2009 19:11

Re: Pointer, Array, Funktion geht nicht
 
..
Zitat:

Zitat von schwa226
PLongArray ist so definert:
Delphi-Quellcode:
TLongArray = Array of Byte;
PLongArray = ^TLongArray;

hier ist doch TLongArray (dynanisches Array) schon ein Pointer auf das Array.
PLongArray wäre dann ein Pointer auf einen Pointer.

.. oder irre ich mich da?

Grüße
Klaus

DeddyH 29. Jun 2009 19:14

Re: Pointer, Array, Funktion geht nicht
 
Hab ich glatt übersehen. Wenn man schon einen Typ deklariert, sollte man den auch nutzen (wieso eigentlich TLongArray, wenn es ein Array of Byte ist?).

schwa226 29. Jun 2009 19:43

Re: Pointer, Array, Funktion geht nicht
 
vielen vielen vielen Dank!!! :lol: :lol:

Mit TLongArray gehts!!! Pointer des Pointers, man o man!!!!

LongArray nur weil langes/großes (Dynamisches) Array...


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