![]() |
Wie bekomme ich einen Zeiger auf ein dynamisches Array ?
Hallo zusammen!
Ich hab da grad ein kleines Problem folgender Natur:
Delphi-Quellcode:
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).
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; Vielleicht steh ich ja grad auf der Leitung ... [Edit]: Korrektur TLongwords + und Longword (sowas von blöd) |
Re: Wie bekomme ich einen Zeiger auf ein dynamisches Array ?
data ist doch schon ein Zeiger.
|
Re: Wie bekomme ich einen Zeiger auf ein dynamisches Array ?
[Edit: Falscher Button]
|
Re: Wie bekomme ich einen Zeiger auf ein dynamisches Array ?
du musst die adresse des ersten elementes übergeben.
|
Re: Wie bekomme ich einen Zeiger auf ein dynamisches Array ?
Das habe ich natürlich schon versucht, aber:
Delphi-Quellcode:
und auch
foo(@data, High(data)+1);
Delphi-Quellcode:
liefern den selben Wert zurück und führen zu einer EAccessviolation ...
foo(@data[0], High(data)+1);
|
Re: Wie bekomme ich einen Zeiger auf ein dynamisches Array ?
1. PLongs deklariert, aber nie verwendet....
2. Deklaration
Delphi-Quellcode:
und Aufruf
procedure foo(pData: PLongword; Count: Integer);
Delphi-Quellcode:
Sind eventuell ... sagen wir ... nicht zu 100% äquivalent.
procedure bar(data: Array Of Byte);
begin foo(@data, High(data)+1); end; 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. |
Re: Wie bekomme ich einen Zeiger auf ein dynamisches Array ?
Zitat:
... 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 ?? |
Re: Wie bekomme ich einen Zeiger auf ein dynamisches Array ?
Zitat:
Delphi-Quellcode:
foo(@data[0], High(data)+1);
|
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. |
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 03:23 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz