![]() |
Kompatibilität für 64Bit überprüfen
Bei mir kam die Tage eine Anfrage rein, ob man meine Library für Audio-Metadaten auch für 64Bit nutzen kann (keine DLL, einfach nur Code, der mit eincompiliert wird). Daher muss ich mich jetzt ein wenig damit beschäftigen. Google liefert da zuerst
Da Integer, Cardinal, Word, DWord, LongInt, SmallInt, Byte etc. alle gleich groß geblieben sind, dürften binäre Schreib- und Leseoperationen beim Parsen/Erstellen der Dateien kein Problem sein. Windows-Messages verschicke ich da auch nicht selbst, so dass Konflikte bzgl. Integer/WPARAM/LPARAM auch nicht zu erwarten sind. Bleiben die Zeiger. Im deutschen Artikel ist das widersprüchlich, aber der englische Artikel erklärt das richtig mit "You cannot assume that:" (hoffe ich zumindest, kann man den Fehler eigentlich irgendwo melden?) Zitat:
Delphi-Quellcode:
Gibt es sonst noch wichtige Punkte, die man beim Umstieg auf 64Bit beachten muss, die in dem Artikel nicht erwähnt sind?
const
APE_PREAMBLE = 'APETAGEX'; ID3V1_PREAMBLE = 'TAG'; type TID3v1Structure = record ID: Array[1..3] of AnsiChar; // 3 Title: Array [1..30] of AnsiChar; // 30 Artist: Array [1..30] of AnsiChar; // 30 Album: Array [1..30] of AnsiChar; // 30 Year: Array [1..4] of AnsiChar; // 4 Comment: Array [1..30] of AnsiChar; // 30 Genre: Byte; // 1 = 128 Bytes total end; TApeHeader = record Preamble: Array[1..8] of AnsiChar; // 8 Version: DWord; // 4 Size: DWord; // 4 ItemCount: DWord; // 4 Flags: DWord; // 4 Reserved: Array[1..8] of Byte; // 8 = 32 Bytes total end; PApeHeader = ^TApeHeader; // aID3v1tag wird aus den letzten 128 Byte einer Datei gelesen function IsValidID3Tag(aID3v1tag: TID3v1Structure): Boolean; var p: Pointer; hiddenApeFooter: TApeHeader; begin p := @aID3v1Tag.Year[4]; hiddenApeFooter := PApeHeader(p)^ ; // Valid wenn: // - Die letzten 128 Byte starten mit "TAG", // - aber die letzten 32 starten NICHT mit "APETAGEX" result := (aID3v1Tag.ID = ID3V1_PREAMBLE) and (hiddenApeFooter.Preamble <> APE_PREAMBLE); end; Denn sonst scheint es mit der Library keine Probleme unter 64Bit zu geben. Es compiliert, und bei ein paar Tests sind keine Dateien kaputt gegangen. :stupid: |
AW: Kompatibilität für 64Bit überprüfen
Solange du Pointer nur auf Pointertypen castest, kann da auch nix passieren. Probleme kann es nur geben, wenn man z.B. Pointer in Integertypen gepresst hat.
|
AW: Kompatibilität für 64Bit überprüfen
Hallo Gausi,
ich benutze schon mehrere Jahre deine Mp3FileUtils 6.0a für 32bit und auch 64bit, bisher hatte keine Probleme. Geändert wurde vom Mir nichts. gruß Reinhold |
AW: Kompatibilität für 64Bit überprüfen
Zitat:
Zitat:
|
AW: Kompatibilität für 64Bit überprüfen
Mal so am Rande bemerkt: Es gibt IntPtr, einen Integer-Datentyp, der immer der Größe eines Pointers entspricht, unabhängig davon, ob 32 oder 64 Bit und vor allem unabhängig von der Plattform. Denn die Integer-Größen sind auch noch Plattform-abhängig und - die älteren mögen sich erinnern - Delphi 7 bis 2007 hatten ein 64-bit NativeInt, obwohl die Compiler nur 32 bit Code erzeugten.
(Allerdings hatten die auch noch kein IntPtr). |
AW: Kompatibilität für 64Bit überprüfen
Jupp, es gibt Typen, die sind direkt für Pointer-Casts gedacht.
Stellt euch mal vor, dass früher der Integer ein dynamischer Typ war, der mitwachsen sollte. Bei 16 zu 32 Bit machte er es noch, aber für 64 dachten sich welche, es wäre geil den Typen einzufrieren und 'nen neuen Typen zu erfinden (NativeInt im Delphi genannt), aber mal sehn, ob er das bei 128 und 256 Bit auch noch machen wird, in den nächsten Jahrtausenden. |
AW: Kompatibilität für 64Bit überprüfen
Zitat:
|
AW: Kompatibilität für 64Bit überprüfen
Zitat:
|
AW: Kompatibilität für 64Bit überprüfen
Na ja, war es nicht üblich im property "Tag" Referenzen auf Klassen abzufüllen? :wink:
|
AW: Kompatibilität für 64Bit überprüfen
Leute, registriert am selben Tag des Posts? Nach über einer Woche eine so selbstverständliche Aussage, die indirekt auch schon in den Verlinkungen des Eingangsposts enthalten ist. Und dann noch das Hinzufügen eines Spam-Links zum Beitrag gerade mal einen Tag danach?
|
| Alle Zeitangaben in WEZ +1. Es ist jetzt 20:22 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz