Announcement

Collapse
No announcement yet.

Verwendung von WriteBinaryData...

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

  • Verwendung von WriteBinaryData...

    Hallo,

    ich wollte in meinem Programm einen Eintrag in die Registry eintragen, der die folgende Form hat:

    <b><i>"Name","00,00,00,40"</b></i>

    Nun habe ich mich schon mal im Forum umgeschaut und bin zu folgendem (falschen) Ergebnis gekommen:

    <pre>
    i:= $00000040;
    Reg.WriteBinaryData ('Name',I, SizeOf(I));
    </pre>

    Falsch in soweit, dass der Eintrag jetzt so aussieht:
    <b><i>"Name","40,00,00,00"</b></i>

    Was mache ich falsch und wie müsste es richtig sein?

    Tschüss...

  • #2
    ... das Problem hat sich durch einige Proben von selbst geklärt.
    Es wird nur alles irgendwie vertauscht in die Registry geschrieben.

    Tschüss..

    Comment


    • #3
      Hi Tim

      Beruhige Dich ist alles korrekt. Falls ich mich richtig erinnere habe ich im Forum schonmal darauf geantwortet. Nun, die Daten der Registry werden 1 zu 1 so wie sie im Speicher liegen angezeigt. Ein Integer = 4 Bytes mit dem Wert $12 34 56 78 liegt im Speicher in der Little Endian Order vor, also im Speicher steht $78 56 34 12. Little Endian heist demzufolge das das Least Significant Byte (LSB) an erster Stelle steht (LSB first and MSB last). Nur bei Big Endian CPU's wie Motorola Chips wird es linear gespeichert.

      Fazit: ein Integer $00000040 muss in der Registry als $40 00 00 00 erscheinen.

      Gruß Hage

      Comment


      • #4
        Hallo Hagen,

        ja, du hattest schonmal darauf geantwortet, aber leider hatte ich es nicht richtig verstanden bzw. gelesen.

        Danke noachmal für die Information!

        Warum wird dies aber von Delphi als "$78 56 34 12" im Speicher abgelegt? Ich meine die Entwickler von Borland hätten doch "Little Endian" verwenden können.

        Tschüss..

        Comment


        • #5
          Hi

          Das IST "Little Endian", und Delphi hat damit garnicht's zu tun, bzw. falls Delphi es NICHT so machen würde, könnten alle Delphi Applikationen nicht mehr auf Intel-CPU's laufen, dafür aber auf den meisten RISC Prozessoren D.h. der verwendete Prozessor bestimmt ob in "Little Endian" oder "Big Endian" gearbeitet werden muss. Das ist auch der Grund warum viele PC Programme und deren Daten NICHT übertragbar sind auf z.B. MAC's, UNIX, SOLARIS, RISC Maschinen.
          Der gleiche Grund zwingt z.b. HTML/JAVA Designer auf PC Maschinen Ihre Daten beim schreiben/lesen zu konvertieren. In der großen Welt wird nämlich alles in "Big Endian" gespeichert.

          FAZIT: damit Delphi für RISC Prozessoren Anwendungen compilieren kann muss die Enian Notation stimmen, gleichbedeuten mit dem völligen Neuprogrammieren des Compilers (Assemblerteil). Das ist der Grund warum KYLIX nur auf Intel-like Maschinen läuft.

          Gruß Hage

          Comment


          • #6
            Hallo,

            danke, damit wäre alles soweit zu diesem Thema geklärt, denke ich.

            Tschüss..

            Comment

            Working...
            X