AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein Bitte eine Zeile C nach Delphi übersetzen
Thema durchsuchen
Ansicht
Themen-Optionen

Bitte eine Zeile C nach Delphi übersetzen

Ein Thema von SleepyMaster · begonnen am 4. Sep 2004 · letzter Beitrag vom 5. Sep 2004
Antwort Antwort
Seite 2 von 2     12   
Benutzerbild von SleepyMaster
SleepyMaster

Registriert seit: 18. Mai 2003
634 Beiträge
 
#11

Re: Bitte eine Zeile C nach Delphi übersetzen

  Alt 5. Sep 2004, 09:30
Zitat:
Das ist eine typische C Konstruktion.
Es wird ein Record variabler Laenge beschrieben.
Die Deklaration ist nicht fuer eine Variable, sondern dient dazu einen alloziierten Speicherbereich
umzutypen, damit man auf das Array zugreifen kann.
Was heißt das jetzt für mich??? Ist das doch ein dynamisches array?
  Mit Zitat antworten Zitat
Benutzerbild von fiasko
fiasko

Registriert seit: 10. Dez 2002
Ort: Dresden
506 Beiträge
 
#12

Re: Bitte eine Zeile C nach Delphi übersetzen

  Alt 5. Sep 2004, 09:38
Zitat von SleepyMaster:
Was heißt das jetzt für mich??? Ist das doch ein dynamisches array?
Nein ist es IMHO nicht. Es ist eine Größe festgelegt - also landet das alles auf'm Heap mit fester Länge.
Thomas Liske
Posts comes with ABSOLUTELY NO WARRANTY, to the extent
permitted by applicable law.
  Mit Zitat antworten Zitat
Robert Marquardt
(Gast)

n/a Beiträge
 
#13

Re: Bitte eine Zeile C nach Delphi übersetzen

  Alt 5. Sep 2004, 13:43
Es ist ein dynamisches Array nach Microsoft C Art.
Es wird ein Speicherbereich alloziiert und dann der Anfang des Bereiches mit diesem Recordtyp interpretiert.
Es wird nun der Laengenwert gesetzt. Danach wird oft eine API-Funktion gerufen, die den Bereich ausfuellt.
Manchmal liefert auch eine API-Funktion einen fertig ausgefuellten Bereich ab.

Nur der Name ANY_SIZE deutet an das es so eine Konstruktion ist.
C erlaubt es das eine Arraydeklaration am Ende eines Records/Structs Null Elemente haben darf, also
ein sizeof() von Null. Damit bekommt der Speicherbereich hinter dem Record einen Namen und Typ.
  Mit Zitat antworten Zitat
Benutzerbild von SleepyMaster
SleepyMaster

Registriert seit: 18. Mai 2003
634 Beiträge
 
#14

Re: Bitte eine Zeile C nach Delphi übersetzen

  Alt 5. Sep 2004, 15:10
Und wie kann ich das am vernünftigsten nach Delphi umsetzen?
  Mit Zitat antworten Zitat
Robert Marquardt
(Gast)

n/a Beiträge
 
#15

Re: Bitte eine Zeile C nach Delphi übersetzen

  Alt 5. Sep 2004, 18:30
Das ist die wahrscheinlich korrekteste Version der Deklaration:
Delphi-Quellcode:
type
  Pabc = ^abc;
  abc = packed record
    def: DWORD;
    hij: array [0..ANY_SIZE-1] of DWORD;
  end;
DWORD ist in Windows.pas deklariert.
Jetzt kannst du einen geeignet langen Speicherbereich mit GetMem alloziieren und den Pointer zu einem Pabc umtypen.
Wenn du dann noch die Rangechecks ausschaltest kannst du die Elemente von hij ansprechen mit hij[I].
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 2     12   


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 13:04 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