AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Object-Pascal / Delphi-Language Delphi Wie bekomme ich einen Zeiger auf ein dynamisches Array ?
Thema durchsuchen
Ansicht
Themen-Optionen

Wie bekomme ich einen Zeiger auf ein dynamisches Array ?

Ein Thema von Whookie · begonnen am 6. Nov 2007 · letzter Beitrag vom 7. Nov 2007
Antwort Antwort
Seite 1 von 2  1 2      
Whookie

Registriert seit: 3. Mai 2006
Ort: Graz
441 Beiträge
 
Delphi 10.3 Rio
 
#1

Wie bekomme ich einen Zeiger auf ein dynamisches Array ?

  Alt 6. Nov 2007, 20:40
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)
Whookie

Software isn't released ... it is allowed to escape!
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.851 Beiträge
 
Delphi 11 Alexandria
 
#2

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

  Alt 6. Nov 2007, 20:43
data ist doch schon ein Zeiger.
Markus Kinzler
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.851 Beiträge
 
Delphi 11 Alexandria
 
#3

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

  Alt 6. Nov 2007, 20:44
[Edit: Falscher Button]
Markus Kinzler
  Mit Zitat antworten Zitat
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

Registriert seit: 23. Sep 2003
Ort: Bockwen
12.235 Beiträge
 
Delphi 2006 Professional
 
#4

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

  Alt 6. Nov 2007, 20:49
du musst die adresse des ersten elementes übergeben.
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat
Whookie

Registriert seit: 3. Mai 2006
Ort: Graz
441 Beiträge
 
Delphi 10.3 Rio
 
#5

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

  Alt 6. Nov 2007, 21:03
Das habe ich natürlich schon versucht, aber:

  foo(@data, High(data)+1); und auch

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

Software isn't released ... it is allowed to escape!
  Mit Zitat antworten Zitat
alzaimar
(Moderator)

Registriert seit: 6. Mai 2005
Ort: Berlin
4.956 Beiträge
 
Delphi 2007 Enterprise
 
#6

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

  Alt 6. Nov 2007, 21:06
1. PLongs deklariert, aber nie verwendet....
2. Deklaration
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.
"Wenn ist das Nunstruck git und Slotermeyer? Ja! Beiherhund das Oder die Flipperwaldt gersput!"
(Monty Python "Joke Warefare")
  Mit Zitat antworten Zitat
Whookie

Registriert seit: 3. Mai 2006
Ort: Graz
441 Beiträge
 
Delphi 10.3 Rio
 
#7

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

  Alt 6. Nov 2007, 21:15
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 ??
Whookie

Software isn't released ... it is allowed to escape!
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.851 Beiträge
 
Delphi 11 Alexandria
 
#8

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

  Alt 6. Nov 2007, 21:19
Zitat:
du musst die adresse des ersten elementes übergeben.
also foo(@data[0], High(data)+1);
Markus Kinzler
  Mit Zitat antworten Zitat
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

Registriert seit: 23. Sep 2003
Ort: Bockwen
12.235 Beiträge
 
Delphi 2006 Professional
 
#9

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

  Alt 6. Nov 2007, 21:24
wenn die funktion in einer Dll ist erwartet sie einen Pointer auf das erste Element des Arrays.
Zudem solltest du die Aufrufkonvention beachten.
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat
Benutzerbild von Lossy eX
Lossy eX

Registriert seit: 7. Aug 2007
113 Beiträge
 
#10

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

  Alt 6. Nov 2007, 21:28
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.
Ich habe ja keine Vorurteile gegenüber Autofahrern ... aber Fahrer von BMW und Mercedes bestätigen diese regelmäßig.
Außerdem neue technologische Errungenschaften: Serienmäßig eingebaute Rechtsfahrsperre und der stromsparende Blinker.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:50 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