Delphi-PRAXiS
Seite 2 von 2     12   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Wie bekomme ich einen Zeiger auf ein dynamisches Array ? (https://www.delphipraxis.net/102907-wie-bekomme-ich-einen-zeiger-auf-ein-dynamisches-array.html)

Whookie 6. Nov 2007 21:34

Re: Wie bekomme ich einen Zeiger auf ein dynamisches Array ?
 
So .. muss mich entschuldigen, aber hätte das ganze wohl kopieren und nicht abtippen sollen ... natürlich sind die Datentypen gleich .. also nochmals korrigiertes erstes Posting.

@mkinzler: siehe Posting #5 @data = @data[0] (kann man im Debugger auch ganz leicht ausprobieren indem man beides jeweils an einen Pointer zuweist) z.B.:

Delphi-Quellcode:
  ..
  p1 = @data;
  p2 = @data[0];
  if (p1 <> p2) Then
    raise exception.create('p1 <> p2');

Muetze1 6. Nov 2007 23:28

Re: Wie bekomme ich einen Zeiger auf ein dynamisches Array ?
 
Warum übergibst du es nicht:

a) als var Parameter und hast somit automatisch einen Zeiger. Wenn es sich (wie hier vermutet) um einen DLL Aufruf handelt, dann kannst du den Prototypen in der App entsprechend mit Var deklarieren und in der DLL mit pointer implementieren
b) als typenlosen Var Parameter
c) als reiner Pointer

negaH 7. Nov 2007 06:04

Re: Wie bekomme ich einen Zeiger auf ein dynamisches Array ?
 
Delphi-Quellcode:
Type
  PLongword = ^TLongword;
  TLongword = Array Of Longword;
das ist wohl sinnfällig. Richtg so

Delphi-Quellcode:
type
  PLongWordArray = ^TLonagWordArray;
  TLongWordArray = array[0..MaxInt / 4 -1] of LongWord; // <-- man beachte kein dynamisches Array

  PLongWord = PLongWordArray; // <-- PLongWord sollte normalerweise ein Zeiger auf ein LongWord sein und nicht auf ein Array[] of LongWord !!
What you say is what you get :=)

Umwandlung eines dynm. Arrays in einen Zeiger auf das statische Array dann mit @Data[0], also immer auf das erste Element. Bei einem 2D-dyn.array dann also @Data[0, 0] usw.

Gruß Hagen

Whookie 7. Nov 2007 06:27

Re: Wie bekomme ich einen Zeiger auf ein dynamisches Array ?
 
Zitat:

Zitat von negaH
Delphi-Quellcode:
  TLongWordArray = array[0..MaxInt / 4 -1] of LongWord; // <-- man beachte kein dynamisches Array

Danke! Das ist der entscheidende Hinweis gewesen, irgendwie war ich der irrigen Meinung, dass mein ursprünglicher TLongword Type bereits statisch ist!


Alle Zeitangaben in WEZ +1. Es ist jetzt 04:54 Uhr.
Seite 2 von 2     12   

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