AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Diese C++ Struktur in Delphi?

Ein Thema von Pseudemys Nelsoni · begonnen am 17. Feb 2006 · letzter Beitrag vom 18. Feb 2006
Antwort Antwort
Benutzerbild von Pseudemys Nelsoni
Pseudemys Nelsoni

Registriert seit: 24. Dez 2002
Ort: Hamburg-Harburg
3.551 Beiträge
 
#1

Diese C++ Struktur in Delphi?

  Alt 17. Feb 2006, 10:18
Moin,

kann mir jemand diesen Code in DelphiSyntax umsetzen?:

Delphi-Quellcode:
typedef struct   {
   DWORD   isPID;         

   union   {

      struct   {

         DWORD   isSR;   
         BYTE   byMode;      

         }
 MP;               

         struct
         {

         DWORD         isSV;   
         DWORD         isSS;

         }
 LHG;               

      struct   {

         DWORD   diSS;
         BYTE   byMode;

      }
 CA;

   } format;
      
} PE_CONF, *PPE_CONF;
Mario
MSN: cyanide@ccode.de
  Mit Zitat antworten Zitat
NicoDE
(Gast)

n/a Beiträge
 
#2

Re: Diese C++ Struktur in Delphi?

  Alt 17. Feb 2006, 10:33
Delphi-Quellcode:
type
  PPE_CONF = ^PE_CONF;
  PE_CONF = record
    isPID : DWORD;
    format: record
      case Integer of
        0: (
          MP: record
            isSR : DWORD;
            byMode: BYTE;
          end);
        1: (
          LGH: record
            isSV : DWORD;
            isSS : DWORD;
          end);
        2: (
          CA: record
            diSS : DWORD;
            byMode: BYTE;
          end);
    end;
  end;
  Mit Zitat antworten Zitat
Benutzerbild von Pseudemys Nelsoni
Pseudemys Nelsoni

Registriert seit: 24. Dez 2002
Ort: Hamburg-Harburg
3.551 Beiträge
 
#3

Re: Diese C++ Struktur in Delphi?

  Alt 17. Feb 2006, 11:08
Moin Nico,

danke für Deinen Code. Der funktioniert auch soweit. Dennoch habe ich 2 weitere Fragen dazu....

1: Wieso funktioniert folgender Code nicht?:

Delphi-Quellcode:
  PBE_CONFIG = ^BE_CONFIG;
  BE_CONFIG = record
     dwConfig: DWORD;
    format: record
      case Integer of
        0: (mp3: record
                 dwSampleRate: DWORD;
              byMode: BYTE;
               wBitrate: WORD;
               bPrivate: BOOL;
               bCRC: BOOL;
               bCopyright: BOOL;
               bOriginal: BOOL;
          end);
        1: (LHV1: record
                 dwStructVersion: DWORD;
               dwStructSize: DWORD;
               dwSampleRate: DWORD;
               dwReSampleRate: DWORD;
            nMode: UINT;
               dwBitrate: DWORD;
               dwMaxBitrate: DWORD;
               nPreset: UINT;
               dwMpegVersion: DWORD;
               dwPsyModel: DWORD;
               dwEmphasis: DWORD;
               bPrivate: BOOL;
               bCRC: BOOL;
               //bCopyright: BOOL;
               bOriginal: BOOL;
               bWriteVBRHeader: BOOL;
               bEnableVBR: BOOL;
               nVBRQuality: INT;
               dwVbrAbr_bps: DWORD;
               bNoRes: BOOL;
            //BYTE         btReserved[255-2*sizeof(DWORD)];
          end);
        2: (aac: record
               dwSampleRate: DWORD;
               byMode: BYTE;
               wBitrate: WORD;
               byEncodingMethod: BYTE;
          end);
    end;
  end;
Der Compiler markiert hier die Zeile "//bCopyright: BOOL;" rot (zu beachten ist, das es sich hierbei um einen Kommentar handelt!)
Wie kann das sein? Bug im Compiler?

http://www.buzka.de/jo2.JPG

2: Wie kann ich folgende Zeile innerhalb eines Records in Delphi umsetzen:

BYTE         btReserved[255-2*sizeof(DWORD)]; ? in Delphi ist SizeOf() ja eine Funktion, die kann ich da ja kaum anwenden oder?
Mario
MSN: cyanide@ccode.de
  Mit Zitat antworten Zitat
Benutzerbild von ste_ett
ste_ett

Registriert seit: 10. Sep 2004
Ort: Dülmen
464 Beiträge
 
Delphi 7 Professional
 
#4

Re: Diese C++ Struktur in Delphi?

  Alt 17. Feb 2006, 11:14
Bei mir meckert der Compiler nur über "nVBRQuality: INT;".
Mit "nVBRQuality: Integer;" geht es.


Zitat von Pseudemys Nelsoni:
2: Wie kann ich folgende Zeile innerhalb eines Records in Delphi umsetzen:

BYTE         btReserved[255-2*sizeof(DWORD)]; ? in Delphi ist SizeOf() ja eine Funktion, die kann ich da ja kaum anwenden oder?
Doch, das geht, da du sizeof() auf eine Konstante, bzw. auf einen fest deklarierten Type anwendest.

btReserved: array[0..255-2*sizeof(DWORD)-1] of Byte;
Stefan
"Geht nicht!" ist keine Fehlerbeschreibung und "Hab ich schon versucht!" keine Antwort!

Hey, it compiles! Ship it!
  Mit Zitat antworten Zitat
NicoDE
(Gast)

n/a Beiträge
 
#5

Re: Diese C++ Struktur in Delphi?

  Alt 17. Feb 2006, 11:16
Zitat von Pseudemys Nelsoni:
Der Compiler markiert hier die Zeile "//bCopyright: BOOL;" rot (zu beachten ist, das es sich hierbei um einen Kommentar handelt!)
Wie kann das sein? Bug im Compiler?
Einige Compiler-Versionen mögen keine Zeilenkommentare innerhalb von varianten Strukturen (versuch's mit einem Blockkommentar: {...} ).

Zitat von Pseudemys Nelsoni:
2: Wie kann ich folgende Zeile innerhalb eines Records in Delphi umsetzen:

BYTE         btReserved[255-2*sizeof(DWORD)];
btReserved: array [0..255 - 2 * SizeOf(DWORD) - 1] of BYTE;
  Mit Zitat antworten Zitat
Benutzerbild von Pseudemys Nelsoni
Pseudemys Nelsoni

Registriert seit: 24. Dez 2002
Ort: Hamburg-Harburg
3.551 Beiträge
 
#6

Re: Diese C++ Struktur in Delphi?

  Alt 17. Feb 2006, 11:22
Danke euch zwei zu 2. :]

Zu ersterem:

Ich habe die Zeile versucht auszukommentieren, weil der Compiler den gleichen Fehler, auch ohne "//" anzeigt. Ich sehe dort aber kein Fehler. Das heisst an der auskommentierung selbst kann es nicht liegen.

Dank euch sieht der Code derzeit so aus:

Delphi-Quellcode:
  PBE_CONFIG = ^BE_CONFIG;
  BE_CONFIG = record
     dwConfig: DWORD;
    format: record
      case Integer of
        0: (mp3: record
                 dwSampleRate: DWORD;
              byMode: BYTE;
               wBitrate: WORD;
               bPrivate: BOOL;
               bCRC: BOOL;
               bCopyright: BOOL;
               bOriginal: BOOL;
          end);
        1: (LHV1: record
                 dwStructVersion: DWORD;
               dwStructSize: DWORD;
               dwSampleRate: DWORD;
               dwReSampleRate: DWORD;
            nMode: UINT;
               dwBitrate: DWORD;
               dwMaxBitrate: DWORD;
               nPreset: UINT;
               dwMpegVersion: DWORD;
               dwPsyModel: DWORD;
               dwEmphasis: DWORD;
               bPrivate: BOOL;
               bCRC: BOOL;
               bCopyright: BOOL;
               bOriginal: BOOL;
               bWriteVBRHeader: BOOL;
               bEnableVBR: BOOL;
               nVBRQuality: INT;
               dwVbrAbr_bps: DWORD;
               bNoRes: BOOL;
                                  btReserved: array [0..255-2*sizeof(DWORD)-1] of BYTE;
          end);
        2: (aac: record
               dwSampleRate: DWORD;
               byMode: BYTE;
               wBitrate: WORD;
               byEncodingMethod: BYTE;
          end);
    end;
  end;
Ich benutze Delphi7 Personal.

Kann jemand den Fehler nachvollziehen?
Mario
MSN: cyanide@ccode.de
  Mit Zitat antworten Zitat
NicoDE
(Gast)

n/a Beiträge
 
#7

Re: Diese C++ Struktur in Delphi?

  Alt 17. Feb 2006, 11:30
Zitat von Pseudemys Nelsoni:
Kann jemand den Fehler nachvollziehen?
Mit Delphi 6 nicht nachvollziehbar...
Delphi-Quellcode:
type
  PBE_CONFIG = ^BE_CONFIG;
  BE_CONFIG = record
    dwConfig: DWORD;
    format : record
      case Integer of
        0: (
          mp3: record
            dwSampleRate: DWORD;
            byMode : BYTE;
            wBitrate : WORD;
            bPrivate : BOOL;
            bCRC : BOOL;
            bCopyright : BOOL;
            bOriginal : BOOL;
          end);
        1: (
          LHV1: record
            dwStructVersion: DWORD;
            dwStructSize : DWORD;
            dwSampleRate : DWORD;
            dwReSampleRate : DWORD;
            nMode : UINT;
            dwBitrate : DWORD;
            dwMaxBitrate : DWORD;
            nPreset : UINT;
            dwMpegVersion : DWORD;
            dwPsyModel : DWORD;
            dwEmphasis : DWORD;
            bPrivate : BOOL;
            bCRC : BOOL;
            bCopyright : BOOL;
            bOriginal : BOOL;
            bWriteVBRHeader: BOOL;
            bEnableVBR : BOOL;
            nVBRQuality : Integer; // INT
            dwVbrAbr_bps : DWORD;
            bNoRes : BOOL;
            btReserved : array [0..255 - 2 * SizeOf(DWORD) - 1] of BYTE;
          end);
        2: (
          aac: record
            dwSampleRate : DWORD;
            byMode : BYTE;
            wBitrate : WORD;
            byEncodingMethod: BYTE;
          end);
    end;
  end;
Du solltest dir abgewöhnen Tabulatoren in deinem Quellcode zu verwenden...
  Mit Zitat antworten Zitat
Benutzerbild von Pseudemys Nelsoni
Pseudemys Nelsoni

Registriert seit: 24. Dez 2002
Ort: Hamburg-Harburg
3.551 Beiträge
 
#8

Re: Diese C++ Struktur in Delphi?

  Alt 17. Feb 2006, 12:00
Ahhh danke Nico... Der Fehler mit dem "Boolean" kam, weil ich dort "INT" statt "Integer" stehen hatte.... Komisch nur das es ihn ganz woanders anzeigt .

Besten Dank^^

PS: Ich habe die Feldnamen aus einer Cpp header datei kopiert, daher sind da noch ein paar Tabulatoren drinne, ich selbst nutze keine


Edit: WIeso kam bei dem Array eigentlich noch ein "-1" ?
Mario
MSN: cyanide@ccode.de
  Mit Zitat antworten Zitat
Question_mark

Registriert seit: 20. Okt 2004
54 Beiträge
 
Delphi 2009 Professional
 
#9

Re: Diese C++ Struktur in Delphi?

  Alt 17. Feb 2006, 22:18
Hallo Leute,
der geniale Nicolaus Wirth hat natürlich auch die "Union" in Pascal eingeführt (ich beziehe mich jetzt auf den ersten Beitrag in diesem Thread). Borland hat diese Struktur schon seit TP 1.0 ebenfalls, sogar bis heute noch in Delphi.
Ist natürlich wie so viele Features in Delphi, wie wir es leider von Borland gewohnt sind, miserabel dokumentiert (nämlich überhaupt nicht ).
Tatsächlich lässt sich ein Union auch in Delphi deklarieren und erlaubt dem Proggie den sauberen Typecast auf einzelne Recordelemente.

Gruss
Question_mark

PS : Bitte nicht mit dem "UNION" von SQL verwechseln, aber die Leute von der C-Fraktion werden mich schon verstanden haben
  Mit Zitat antworten Zitat
NicoDE
(Gast)

n/a Beiträge
 
#10

Re: Diese C++ Struktur in Delphi?

  Alt 18. Feb 2006, 09:08
Zitat von Question_mark:
Hallo Leute,
der geniale Nicolaus Wirth hat natürlich auch die "Union" in Pascal eingeführt (ich beziehe mich jetzt auf den ersten Beitrag in diesem Thread). Borland hat diese Struktur schon seit TP 1.0 ebenfalls, sogar bis heute noch in Delphi.
Ist natürlich wie so viele Features in Delphi, wie wir es leider von Borland gewohnt sind, miserabel dokumentiert (nämlich überhaupt nicht ).
Tatsächlich lässt sich ein Union auch in Delphi deklarieren und erlaubt dem Proggie den sauberen Typecast auf einzelne Recordelemente.
Könntest du deine These bitte mit einem Quellcode-Beispiel stützen?
  Mit Zitat antworten Zitat
Antwort Antwort


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 00:08 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