Announcement

Collapse
No announcement yet.

Binärdatei mit BC5 und BCB4 bearbeiten

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Binärdatei mit BC5 und BCB4 bearbeiten

    Hallo,
    ich habe eine BC5-Anwendung mit der ich Binärdateien erstelle.
    Auf diese Dateien möchte ich nun mit einer BCB4-Anwendung zugreifen.
    Nur stimmen die Datentypen nicht überein (sizeof liefert bei beiden Compilern das gleiche Ergebnis).
    Hat evtl. jemand eine Aufstellung, wie ich die Daten deklarieren muß?

    Besten Dank im Voraus
    Thomas Wagner

  • #2
    Hallo Thomas, ist das BC5 Programm eine 16 oder 32 bit Anwendung ? Wenn es 16 bit ist, hilft folgendes vor der struct-Definition:

    #ifdef __FLAT__
    #pragma warn -pck
    #pragma option -a2
    #endif

    Das -pck unterdrückt die Warnung "Structure packing size has changed". -a2 macht aus einem 4 bit Integer einen 2 bit Integer. In den entsprechenden Deklarationen muß int in short int geändert werden. Und nachher muß (oder sollte) wieder auf 4 bit Integer zurück gesetzt werden:

    #ifdef __FLAT__
    #pragma option -a
    #endif

    Wenn dies nicht zutrifft, dann solltest Du vielleicht mal etwas konkreter sagen, was Du für Probleme hast, welche Variablen Du wie geklariert hast. Gruß : Günthe
    Günther

    Comment


    • #3
      Hallo Günther,
      Danke für Deine schnelle Antwort.

      Das BC5 Programm ist eine 32 bit Anwendung
      und zum testen habe ich folgende struktur verwendet.

      typedef struct
      {
      double db1;
      int n1;
      double db2;
      double db3;
      } TEST;

      wenn ich jetzt die Datei mit dem Builder-Programm lese,
      stimmt der wert in db1 und n1, aber die zahlen in db2 und db3 sind
      falsch.
      Bei einer struktur mit nur drei double werten stimmen die werte überein!!!

      Gruß Thoma

      Comment


      • #4
        Hallo Thomas, versuch trotzdem mal wie ich im Prinzip schon sagte mit short int und

        #pragma option -a2

        sizeof liefert als Ergebnis 26 oder 28 ?

        stimmt n1 immer, ich meine, egal welcher Wert in db2 steht ? Oder kann es sein daß bei bestimmten großen oder negativen Zahlen in db2 n1 auch verkehrt ist ?

        bis dann... Günthe
        Günther

        Comment


        • #5
          Hallo Thomas, ich hab mir jetzt mal die Mühe gemacht, mit einer BC5 Anwendung Deine Structur in eine Datei zu schreiben und mit einer BCB1 Anwendung wieder zu lesen. Kein Problem. Ohne #pragma-Kram, den ich ja wegen 16bit Integer vermutet hatte. Dateigröße und sizeof ergeben immer 28, die eingegebenen Zahlenwerte hab ich wiedererkannt. Im BC5 hab ich zudem noch Byteausrichtung 8 Byte gesagt, hat nichts damit zu tun, sonst müßte ja die Dateigröße 32 Bytes sein. Einzige Vermutung: In Deinem Programm steckt woanders noch ein ganz dummer Fehler, und hier macht sich die Folge bemerkbar ! Viel Spaß beim Suchen! - Günthe
          Günther

          Comment


          • #6
            Hallo Günther,

            hab Deinen "#pragma-Kram" eingebaut und jetzt werden die werte einwandfrei übergeben! Warum es bei Dir ohne funktioniert, vielleicht liegt es an der BCB Version 1-4 ???

            Nur mit den enum's gab es noch Probleme, aber mit #pragma option -b
            werden auch diese richtig übergeben.

            Vielen Dank für Deine Mühe und hoffentlich kann ich Dir auch mal so schnell und Kompetent helfen!!!

            Gruß Thoma

            Comment


            • #7
              Hallo Thomas, da muß ich jetzt aber noch einmal nachhaken. Ist das BC5 Projekt jetzt wirklich eine 32 bit Application ? Welchen Wert liefert sizeof ? 26 oder 28 oder noch was anderes ? Wenn es an der BC++Builder -Version liegt, dann würde mich wirklich interssieren, was da nun schon wieder anders ist ! Ich arbeite nämlich auch mit sehr vielen Binärdateien ! - Günthe
              Günther

              Comment


              • #8
                Hallo Günther, ich habe getestet:

                BC 4.5 (16bit) -> 26

                BC 5.02 (32bit) -> 28

                BCB1 (32bit) -> ??

                BCB4 (32bit) -> 32

                immer ohne -a2

                Gruß Thoma

                Comment

                Working...
                X