AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Sonstige Fragen zu Delphi Delphi Problem mit Record Feld align unter Delphi 2009

Problem mit Record Feld align unter Delphi 2009

Ein Thema von igel457 · begonnen am 14. Sep 2008 · letzter Beitrag vom 7. Okt 2008
Antwort Antwort
Seite 1 von 2  1 2   
Benutzerbild von igel457
igel457

Registriert seit: 31. Aug 2005
1.622 Beiträge
 
FreePascal / Lazarus
 
#1

Problem mit Record Feld align unter Delphi 2009

  Alt 14. Sep 2008, 11:35
Hallo,
ich habe mit die Trial von Delphi 2009 heruntergeladen und versuche gerade meine Grafikbibliothek damit zum laufen zu kriegen. Das funktioniert soweit auch schon ganz gut. Ein Problem habe ich jedoch noch mit der Acinerella-Videoschnittstelle.

Ich habe folgende Typedeklaration:
Delphi-Quellcode:
{$MINENUMSIZE 1}
{$ALIGN 8}
// Addr Offs. TurboDelphi 2006 | Delphi 2009
TAc_stream_info = record // 0 | 0
  stream_type: TAc_stream_type; // 0 | 0
  case additional_info: byte of // 4 | 8
    0: (video_info: TAc_video_stream_info); // 8 | 16
    1: (audio_info: TAc_audio_stream_info); // 8 | 16
end;
Wie man sieht sind die Speicheradressen bei Delphi 2009 verschoben: Die Dummy-Variable "additional_info" wird bei TurboDelphi einfach zu Offset "4" verschoben, bei Delphi 2009 wird sie als eigenes Feld behandelt und bekommt Adresse "8". Die darauffolgenden Felder werden entsprechend weiter verschoben.

Hat jemand eine Idee wie ich dieses Problem beheben könnte? Ist das so gewollt? Oder ist es ein Bug im neuen Delphi?

Danke für eure Antworten,
Andreas
Andreas
"Sollen sich auch alle schämen, die gedankenlos sich der Wunder der Wissenschaft und Technik bedienen, und nicht mehr davon geistig erfasst haben als die Kuh von der Botanik der Pflanzen, die sie mit Wohlbehagen frisst." - Albert Einstein
  Mit Zitat antworten Zitat
Daniel
(Co-Admin)

Registriert seit: 30. Mai 2002
Ort: Hamburg
13.919 Beiträge
 
Delphi 10.4 Sydney
 
#2

Re: Problem mit Record Feld align unter Delphi 2009

  Alt 14. Sep 2008, 11:39
Was stecken denn für Variablen hinter Deinen Typen?
Ein Char beispielsweise ist jetzt nicht mehr nur 1 Byte lang. Analoges gilt für Strings. Das könnte eine mögliche Ursache sein. Die "alten" Typen heißen jetzt "AnsiChar" bzw. "AnsiString".
Daniel R. Wolf
mit Grüßen aus Hamburg
  Mit Zitat antworten Zitat
jbg

Registriert seit: 12. Jun 2002
3.481 Beiträge
 
Delphi 10.1 Berlin Professional
 
#3

Re: Problem mit Record Feld align unter Delphi 2009

  Alt 14. Sep 2008, 11:42
Zitat von Daniel:
Analoges gilt für Strings.
Ein String ist trotzdem nur ein 4-Byte Zeiger. Somit gilt nicht "Analoges", sondern das was bisher auch gegolten hat.

Was sich aber geändert hat ist dass Delphi 2008 sich nun strikter an dass {$ALIGN x} hält.
  Mit Zitat antworten Zitat
Daniel
(Co-Admin)

Registriert seit: 30. Mai 2002
Ort: Hamburg
13.919 Beiträge
 
Delphi 10.4 Sydney
 
#4

Re: Problem mit Record Feld align unter Delphi 2009

  Alt 14. Sep 2008, 11:57


Ich war jetzt gedanklich bei Strings mit fixer Länge. Wenn ich so einen String in einem Record habe, dann sitzt der doch komplett in diesem Record und verschiebt alle weiteren Felder entsprechend seiner Größe nach hinten.
Daniel R. Wolf
mit Grüßen aus Hamburg
  Mit Zitat antworten Zitat
jbg

Registriert seit: 12. Jun 2002
3.481 Beiträge
 
Delphi 10.1 Berlin Professional
 
#5

Re: Problem mit Record Feld align unter Delphi 2009

  Alt 14. Sep 2008, 12:00
Nur nutzen ShortStrings immernoch AnsiChar als Element.
  Mit Zitat antworten Zitat
Daniel
(Co-Admin)

Registriert seit: 30. Mai 2002
Ort: Hamburg
13.919 Beiträge
 
Delphi 10.4 Sydney
 
#6

Re: Problem mit Record Feld align unter Delphi 2009

  Alt 14. Sep 2008, 12:02
Na schön - hast Recht.
Daniel R. Wolf
mit Grüßen aus Hamburg
  Mit Zitat antworten Zitat
Benutzerbild von igel457
igel457

Registriert seit: 31. Aug 2005
1.622 Beiträge
 
FreePascal / Lazarus
 
#7

Re: Problem mit Record Feld align unter Delphi 2009

  Alt 14. Sep 2008, 12:31
Hallo,
schonmal danke für die Antworten.

Hier sind die Deklarationen der anderen Datentypen:
Delphi-Quellcode:
TAc_decoder_type = (
  AC_DECODER_TYPE_VIDEO = 0,
  AC_DECODER_TYPE_AUDIO = 1
);
Delphi-Quellcode:
TAc_audio_stream_info = record
  samples_per_second: integer;
  bit_depth: integer;
  channel_count: integer;
end;
Delphi-Quellcode:
  
TAc_video_stream_info = record
  frame_width: integer;
  frame_height: integer;
  pixel_aspect: single;
  frames_per_second: double;
end;
Wie man sieht: Kein Typ vorhanden, der etwas mit Char oder String zu tun haben könnte.
Ich halte es einfach für einen Fehler, das die unbedeutende und niemals irgendwo verwendete Dummy-Variable "additional_info" nun auch ausgerichtet wird. Es handelt sich ja nicht einmal um eine richtige Variable, sondern vielmehr um einen Sprachkonstrukt.
Andreas
"Sollen sich auch alle schämen, die gedankenlos sich der Wunder der Wissenschaft und Technik bedienen, und nicht mehr davon geistig erfasst haben als die Kuh von der Botanik der Pflanzen, die sie mit Wohlbehagen frisst." - Albert Einstein
  Mit Zitat antworten Zitat
Apollonius

Registriert seit: 16. Apr 2007
2.325 Beiträge
 
Turbo Delphi für Win32
 
#8

Re: Problem mit Record Feld align unter Delphi 2009

  Alt 14. Sep 2008, 12:34
Warum deklarierst du das Feld denn, wenn du es nicht verwendest? Delphi erlaubt auch Folgendes:
Delphi-Quellcode:
TAc_stream_info = record
  stream_type: TAc_stream_type;
  case byte of
    0: (video_info: TAc_video_stream_info);
    1: (audio_info: TAc_audio_stream_info);
end;
Wer erweist der Welt einen Dienst und findet ein gutes Synonym für "Pointer"?
"An interface pointer is a pointer to a pointer. This pointer points to an array of pointers, each of which points to an interface function."
  Mit Zitat antworten Zitat
Benutzerbild von igel457
igel457

Registriert seit: 31. Aug 2005
1.622 Beiträge
 
FreePascal / Lazarus
 
#9

Re: Problem mit Record Feld align unter Delphi 2009

  Alt 14. Sep 2008, 12:40
Das hat natürlich was - so funktioniert es.
Ich wusste nicht, das ich das auch weg lassen kann.
Trotzdem hat sich das Verhalten in dieser Delphiversion eindeutig verändert und ich habe in den Releasenotes von Delphi 2009 nichts davon gelesen.

Also das Problem ist damit gelöst - schön finde ich es aber trotzdem nicht.

Danke an Alle,
Andreas
Andreas
"Sollen sich auch alle schämen, die gedankenlos sich der Wunder der Wissenschaft und Technik bedienen, und nicht mehr davon geistig erfasst haben als die Kuh von der Botanik der Pflanzen, die sie mit Wohlbehagen frisst." - Albert Einstein
  Mit Zitat antworten Zitat
Apollonius

Registriert seit: 16. Apr 2007
2.325 Beiträge
 
Turbo Delphi für Win32
 
#10

Re: Problem mit Record Feld align unter Delphi 2009

  Alt 14. Sep 2008, 12:48
Ich sehe das wie jbg: Der Fehler liegt bei Turbo Delphi. Denn dort widerspricht die Ausrichtung ja eindeutig der Direktive {$ALIGN 8}. Aber auch bei Turbo Delphi erhält das Feld additional_info seinen Platz.
Wer erweist der Welt einen Dienst und findet ein gutes Synonym für "Pointer"?
"An interface pointer is a pointer to a pointer. This pointer points to an array of pointers, each of which points to an interface function."
  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 +1. Es ist jetzt 05:13 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