AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren

return Pointer / dynamic array

Ein Thema von renew · begonnen am 21. Jul 2020 · letzter Beitrag vom 22. Jul 2020
Antwort Antwort
Seite 1 von 2  1 2   
renew

Registriert seit: 22. Jun 2020
20 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#1

return Pointer / dynamic array

  Alt 21. Jul 2020, 21:41
Hallo,
ich versuche etwas OpenGl Graik unter Delphi, habe aber Probleme mit dyn.arrays und Pointern (hab das mal in C++ gemacht)
Ich habe ein dynamisches Array von Vertexdaten im Mesh (protected):
Code:
    TVertex = packed record
        x, y, z: Real;
    end;
    TMesh = class
    protected
       fVertices: array of TVertex;
    end;
Nun möchte ich auf die Daten von aussen zugreifen, um sowas zu tun
Code:
    property Vertices : array of TVertex read fVertices;
    function GetVertices : array of TVertex;
[...]
procedure TRenderer.DrawMesh(mesh: TMesh);
var
    vertices: array of TVertex;
begin
    vertices:= mesh.GetVertices;
    vertices[0].y := 1;
    glVertexPointer(3, GL_FLOAT, sizeof(TVertex), vertices[0].x);
Wie mache ich das?
Sind dynamische Arrays überhaupt gleichzusetzen mit c++: vertices = new TVertex[count]; ?
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe
Online

Registriert seit: 20. Jan 2006
Ort: Lübbecke
8.649 Beiträge
 
Delphi 10.4 Sydney
 
#2

AW: return Pointer / dynamic array

  Alt 22. Jul 2020, 00:11
Wenn da protected steht, dann schließt das einen Zugriff von außen bewusst aus - zumindest nicht ohne Tricks.
Woher kommt denn die TMesh-Deklaration? Wenn die von dir selbst kommt, warum dann das protected , wenn du doch von außen darauf zugreifen willst?
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu
Online

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
38.575 Beiträge
 
Delphi 10.4 Sydney
 
#3

AW: return Pointer / dynamic array

  Alt 22. Jul 2020, 00:45
dynamische Arrays sind halt dynamische Arrays, auch als Result ... die werden auch schön automatisch aufgeräumt (k.A. wie das in C++ ist)

Aber als Result ist "array of" echt beschissen.
Entweder als externer Typ oder generisch via TArray<>, denn eine "kompatibe" Variable ist sonst nicht nutzbar und das Einzige was ohne Variable ginge, wäre for M in mesh.GetVertices do .
Abgesehn von den Zugriffsproblemen auf Protected/Private, welche ja nur Intern freigegeben sind.

Zitat:
Wenn da protected steht, dann schließt das einen Zugriff von außen bewusst aus
Wobei ich dann die Frage des TE nicht verstehen würde, denn der Compiler meldet sich hier mit einer deutlichen Fehlermeldung.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
Delphi-Tage 2005-2014

Geändert von himitsu (22. Jul 2020 um 21:50 Uhr) Grund: schlechtschreibung
  Mit Zitat antworten Zitat
Rollo62

Registriert seit: 15. Mär 2007
3.212 Beiträge
 
Delphi 10.4 Sydney
 
#4

AW: return Pointer / dynamic array

  Alt 22. Jul 2020, 07:27
Aber als Result ist "array of" echt beschissen.
Entweder als externer Typ oder generisch via TArray<>
Ja das sehe ich auch so.

Es gibt neben Result auch die var/out Rückgabe, als Alternative.
Aber auch da würde ich eigenen Typ / TArray<> bevorzugen.
Delphi-Quellcode:
procedure IncArray1(data: array of integer);
var i : integer;
begin
  for i := Low(data) to High(data) do
    data[i] := data[i] + 5;
end;
  Mit Zitat antworten Zitat
renew

Registriert seit: 22. Jun 2020
20 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#5

AW: return Pointer / dynamic array

  Alt 22. Jul 2020, 10:39
Wenn da protected steht, dann schließt das einen Zugriff von außen bewusst aus - zumindest nicht ohne Tricks.
Ich möchte ja nicht von außen mit Schreibrechten direkt auf die protected Membervariable zugreifen , deshalb will ich ja ein getter oder Property nur mit leserechten. also z.b. property Vertices : array of TVertex read fVertices; Aber das schaffe ich nicht wegen dem Rückgabetyp "array of ..."

Die Frage ist auch, ob ein "array of" einen zusammenhängenden Speicherbereich reserviert, oder ob es sowas wie ne verkettete Liste oder so ist, und somit die einzelnen Elemente des Arrays im Speicher kreuz und quer liegen können. Weil diesen "Speicherbereich" muss ich an die OpenGl Funktionen "an einem Stück" übergeben.

Geändert von renew (22. Jul 2020 um 10:42 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.270 Beiträge
 
Delphi 11 Alexandria
 
#6

AW: return Pointer / dynamic array

  Alt 22. Jul 2020, 10:51
Nach meiner Kenntnis liegen Arrays immer blockweise im Speicher.
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
renew

Registriert seit: 22. Jun 2020
20 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#7

AW: return Pointer / dynamic array

  Alt 22. Jul 2020, 10:55
Oder kann ich z.b. ein "array of TVertex" in ein Pointer casten, diesen zurückgeben, und später bei Bedarf diesen wieder in ein "array of TVertex" zurückcasten?
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu
Online

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
38.575 Beiträge
 
Delphi 10.4 Sydney
 
#8

AW: return Pointer / dynamic array

  Alt 22. Jul 2020, 12:49
Oder kann ich z.b. ein "array of TVertex" in ein Pointer casten, diesen zurückgeben
Wer das macht wird gesteinigt, gevierteilt, geköpft, gehängt und anschließend bekommt er noch eine Standpaucke, damit er nie wieder auf so eine saudämliche Idee kommt.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
Delphi-Tage 2005-2014
  Mit Zitat antworten Zitat
samso

Registriert seit: 29. Mär 2009
430 Beiträge
 
#9

AW: return Pointer / dynamic array

  Alt 22. Jul 2020, 13:24
Ich glaube renew möchte einfach nur die Syntax zu dynamische Arrays als Rückgabewert erfahren. So sollte es gehen:
Delphi-Quellcode:
type
  TVertexDynArray = array of TVertex;
  TMesh = class
  protected
     fVertices: TVertexDynArray;
  public
    property Vertices : TVertexDynArray read fVertices;
    function GetVertices : TVertexDynArray ;
  end;
[...]
procedure TRenderer.DrawMesh(mesh: TMesh);
var
    vertices: TVertexDynArray;
begin
    vertices:= mesh.GetVertices;
    vertices[0].y := 1;
    glVertexPointer(3, GL_FLOAT, sizeof(TVertex), vertices[0].x);
  Mit Zitat antworten Zitat
renew

Registriert seit: 22. Jun 2020
20 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#10

AW: return Pointer / dynamic array

  Alt 22. Jul 2020, 19:28
Ich glaube renew möchte einfach nur die Syntax zu dynamische Arrays als Rückgabewert erfahren. So sollte es gehen:
genau das Danke
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2   

Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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 +2. Es ist jetzt 22:13 Uhr.
Powered by vBulletin® Copyright ©2000 - 2021, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2021 by Daniel R. Wolf