[Gelöst] Übersetzen von struct in c nach record case in Pascal

Für Fragen zur Programmiersprache auf welcher Lazarus aufbaut
Antworten
joesky
Beiträge: 25
Registriert: Fr 12. Feb 2021, 16:38

[Gelöst] Übersetzen von struct in c nach record case in Pascal

Beitrag von joesky »

Bei meinem Projekt (beschrieben hier) muss ich ein struct in c in ein record in Pascal übersetzen. Dieses struct enthält ein union, das ich zwar übersetzt habe, aber es auf eine Zugriffschutzverletzung läuft, wenn man es abfragt.

Dieses struct möchte ich übersetzen:

Code: Alles auswählen

struct mpd_entity {
  /**
  * The type of this entity.
  */
  enum mpd_entity_type type;
  
  /**
    * This union contains type-safe pointers to the real object.
    * Check the entity type before attempting to obtain the
    * object!
    */
  union {
     /**
	 * Only valid if type==#MPD_ENTITY_TYPE_DIRECTORY.
	 */
	struct mpd_directory *directory;

	/**
	 * Only valid if type==#MPD_ENTITY_TYPE_SONG.
	 */
	struct mpd_song *song;

	/**
	 * Only valid if type==#MPD_ENTITY_TYPE_PLAYLIST.
	 */
	struct mpd_playlist *playlistFile;
  } info;
};
Mein record:

Code: Alles auswählen

Tmpd_entity = packed record
    type_r: Tmpd_entity_type; // Das Enum hab ich definiert, es wird auch gesetzt und kann ausgelesen werden
    info: record
      case Tmpd_entity_type of
        NMPD_ENTITY_TYPE_DIRECTORY: (directory: Pmpd_directory);
        NMPD_ENTITY_TYPE_SONG: (song: Pmpd_song);
        NMPD_ENTITY_TYPE_PLAYLIST: (playlist: Pmpd_playlist);
    end;
  end;
type_r habe ich zum C Code umbenannt, da type in Pascal ein Schlüsselwort ist. type_r wird auch gesetzt und kann ausgegeben werden. Die Zugriffschutzverletzung kommt im variablen Teil... Hat jemand eine Idee, was ich falsch mache?
Zuletzt geändert von joesky am Mi 3. Mär 2021, 21:41, insgesamt 1-mal geändert.

Socke
Lazarusforum e. V.
Beiträge: 3158
Registriert: Di 22. Jul 2008, 19:27
OS, Lazarus, FPC: Lazarus: SVN; FPC: svn; Win 10/Linux/Raspbian/openSUSE
CPU-Target: 32bit x86 armhf
Wohnort: Köln
Kontaktdaten:

Re: Übersetzen von struct in c nach record case in Pascal

Beitrag von Socke »

Ich würde den variablen Teil nicht als Sub-Record sondern direkt definieren. Außerdem ist ein packed record anders im Speicher ausgerichtet als ein C-Compiler das per Default machen würde.

Code: Alles auswählen

{$PACKRECORDS C}
Tmpd_entity = record
case &type: Tmpd_entity_type of // wenn im case ein Variablenname angegeben wird, wird dafür ebenfalls Speicher reserviert
	NMPD_ENTITY_TYPE_DIRECTORY: (directory: Pmpd_directory);
	NMPD_ENTITY_TYPE_SONG: (song: Pmpd_song);
	NMPD_ENTITY_TYPE_PLAYLIST: (playlist: Pmpd_playlist);
end;
MfG Socke
Ein Gedicht braucht keinen Reim//Ich pack’ hier trotzdem einen rein

joesky
Beiträge: 25
Registriert: Fr 12. Feb 2021, 16:38

Re: Übersetzen von struct in c nach record case in Pascal

Beitrag von joesky »

Danke! Das hat funktioniert. Hab da natürlich nicht dran gedacht...

joesky
Beiträge: 25
Registriert: Fr 12. Feb 2021, 16:38

Re: [Gelöst] Übersetzen von struct in c nach record case in Pascal

Beitrag von joesky »

Frage an die Mods: Wenn ich weitere Probleme mit den Structs oder Datentypen habe, kann ich das hier anhängen oder soll ich neue Threads starten?

Antworten