Delphi-PRAXiS
Seite 1 von 2  1 2      

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 20:40


Wie bekomme ich einen Zeiger auf ein dynamisches Array ?
 
Hallo zusammen!
Ich hab da grad ein kleines Problem folgender Natur:

Delphi-Quellcode:
Type
  PLongword = ^TLongword;
  TLongword = Array Of Longword;


  procedure foo(pData: PLongword; Count: Integer);
  begin
    for i := 0 To Count-1 Do Do
      ... := pData^[i]
  end;


  procedure bar(const data: Array Of Longword);
  begin
    foo(@data, High(data)+1);
  end;

 

  begin
    ..
    bar([1,3,5,7]);
    ..
  end;
nur leider funktioniert @data nicht und irgendwie will es mir nicht gelingen einen vernünftigen pointer auf data zu kriegen :( (foo liegt übrigens in einer dll).

Vielleicht steh ich ja grad auf der Leitung ...

[Edit]: Korrektur TLongwords + und Longword (sowas von blöd)

mkinzler 6. Nov 2007 20:43

Re: Wie bekomme ich einen Zeiger auf ein dynamisches Array ?
 
data ist doch schon ein Zeiger.

mkinzler 6. Nov 2007 20:44

Re: Wie bekomme ich einen Zeiger auf ein dynamisches Array ?
 
[Edit: Falscher Button]

SirThornberry 6. Nov 2007 20:49

Re: Wie bekomme ich einen Zeiger auf ein dynamisches Array ?
 
du musst die adresse des ersten elementes übergeben.

Whookie 6. Nov 2007 21:03

Re: Wie bekomme ich einen Zeiger auf ein dynamisches Array ?
 
Das habe ich natürlich schon versucht, aber:

Delphi-Quellcode:
  foo(@data, High(data)+1);
und auch

Delphi-Quellcode:
  foo(@data[0], High(data)+1);
liefern den selben Wert zurück und führen zu einer EAccessviolation ...

alzaimar 6. Nov 2007 21:06

Re: Wie bekomme ich einen Zeiger auf ein dynamisches Array ?
 
1. PLongs deklariert, aber nie verwendet....
2. Deklaration
Delphi-Quellcode:
procedure foo(pData: PLongword; Count: Integer);
und Aufruf
Delphi-Quellcode:
procedure bar(data: Array Of Byte);
begin
  foo(@data, High(data)+1);
end;
Sind eventuell ... sagen wir ... nicht zu 100% äquivalent.

3.Parameterdeklaration und Typendeklaration sind unterschiedlich. Delphi kommt da vermutlich durcheinander, denn 'Array Of XXX' sind sowohl offene Array-Parameter als auch dynamische Arrays.

Abhilfe: verwende überall die gleiche Typendeklaration.

Whookie 6. Nov 2007 21:15

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

Zitat von alzaimar
1. PLongs deklariert, aber nie verwendet....
2. Deklaration

Tippfehler im ersten Posting entfernt ... Problem bleibt das selbe ... ich hätte gerne einen Zeiger auf das dynamische Array, weil es mir halt garso wiederstrebt, in bar() in ein statisches array umzukopieren...

... und wie gesagt foo() befindet sich in einer dll (die nicht von mir stammt) die einfach einen pointer auf ein array von longword erwartet. da is nix zu holen mit gleichen Definitionen.

... und durcheinander kommen sollte Delphi schon garnicht ??

mkinzler 6. Nov 2007 21:19

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

du musst die adresse des ersten elementes übergeben.
also
Delphi-Quellcode:
foo(@data[0], High(data)+1);

SirThornberry 6. Nov 2007 21:24

Re: Wie bekomme ich einen Zeiger auf ein dynamisches Array ?
 
wenn die funktion in einer Dll ist erwartet sie einen Pointer auf das erste Element des Arrays.
Zudem solltest du die Aufrufkonvention beachten.

Lossy eX 6. Nov 2007 21:28

Re: Wie bekomme ich einen Zeiger auf ein dynamisches Array ?
 
Du musst in jedem Fall auch auf die Typen achten. Du kannst nicht die Größe eines array of byte auf ein array of longword übertragen. Denn 100 Elemente in einem array of byte sind gerade mal 25 in einem array of longword.


Alle Zeitangaben in WEZ +1. Es ist jetzt 11:17 Uhr.
Seite 1 von 2  1 2      

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