![]() |
AW: Binärdatei Record auslesen\zuweisen
Sieht hier aber so aus, als ob das standard Alignment (von 4?) korrekt wäre. Die Pfade der hinteren Einträge des Arrays stimmen ja bis aufs letzte Byte exakt. Sicher, dass
Delphi-Quellcode:
an der Stelle 50 sein muss?
volume
|
AW: Binärdatei Record auslesen\zuweisen
Zitat:
Es war mal vor Jahren 4 und in etwas aktuelleren Delphis ist es 8 (für Windows ... in anderen OS vielleicht anders) ![]() PS: ![]() ![]() ALIGN gibt aber nur die "maximale" Ausrichtung an. Kleiner Typen werden an ihrer Größe ausgerichtet. > WORD alle 2 Byte (außer &Align ist unter 2) > Interger alle 4 Byte, also nach einem WORD bliebe eine Lücke von 2 |
AW: Binärdatei Record auslesen\zuweisen
Zitat:
Zitat:
Habe alles versucht.
Delphi-Quellcode:
{$Align On}
{$ALIGN 8} TSTChannel = record ID : Integer; streamName : Array [0..250] of AnsiChar; freq : single; volume : single; pan : single; mute : byte; solo : byte; duration : Integer; percent : Integer; grouplevel : single; led : byte; rMeterValue : single; reserved : Array [0..25] of AnsiChar; end; {$Align Off}
Delphi-Quellcode:
Array [0..250] of AnsiChar;
Auf
Delphi-Quellcode:
Array [0..MAX_PATH] of AnsiChar;
dann kracht es. gruss |
AW: Binärdatei Record auslesen\zuweisen
Zitat:
![]()
Delphi-Quellcode:
var F: file of TSTChannel;
Zitat:
Delphi-Quellcode:
{$A+} = {$ALIGN ON} = {$ALIGN 8} wobei 8 der DEFAULT ist
{$A-} = {$ALIGN OFF} = {$ALIGN 1}
Delphi-Quellcode:
{$ALIGN 8} // ab hier 8
TSTChannel = record .. end; {$ALIGN ON} // ab hier wieder DEFAULT |
AW: Binärdatei Record auslesen\zuweisen
Zitat:
Aber ich benötige ein Array. gruss |
AW: Binärdatei Record auslesen\zuweisen
Das ist ein Array bzw. eine Liste. :zwinker:
FileSize = Anzahl der Records, also in der API für diese "Typed Files" FilePos = Index des Record FileSize und FilePos werden intern auf RecSize umgerechnet. ![]()
Delphi-Quellcode:
=
file of AnsiChar
Delphi-Quellcode:
= eine Textdatei
Text
|
AW: Binärdatei Record auslesen\zuweisen
Du meinst wenn ich dich richtig verstehe anstelle von CreateFile..
Nur das löst mein Problem nicht. Letztendlich ein Ersatz für die WinApi32. gruss |
AW: Binärdatei Record auslesen\zuweisen
Drum hatte ich es eigentlich auch nur nebenbei erwähnt.
Aber ansonsten wurde auch schon alles Wichtige genannt. * die Speicherausrichtung * die Art der Typen (z.B. AnsiChar und WideChar, aber nicht Char) Arrays werden wie ihr enthaltener Typ ausgerichtet, außer bei "packed array", und bei Records wie ihr größter Typ, außer bei "packed record". |
AW: Binärdatei Record auslesen\zuweisen
Zitat:
Das ist wieder ein fall wo ich mir nur selber helfen kann.. Also nochmal Danke an alle die versucht haben für mich mitzudenken. :) gruss |
AW: Binärdatei Record auslesen\zuweisen
So, noch mal kurz vor Feierabend ins Forum geschaut.
Dein Record hat 312 Byte. Die Blöcke in der Datei sind 320 Byte groß. Wenn ich das richtig in Erinnerung habe, sind Records standardmäßig nicht gepackt. In Turbo-Pascal war das noch anders. :) Entweder ist dein Record falsch definiert oder die Speicher-Ausrichtung passt nicht. Ich habe das nicht exakt nachgerechnet, aber ich meine, dass die Ausrichtung zu einer Verschiebung um 10 Byte führen sollte. Das passt dann immer noch nicht zu den 320 Byte. Lies das doch mal in Blockgrößen (Record of Array [0..319] definieren) zu 320 Byte ein und teste Stückweise, wie es in den geplanten Record passt. Klassisches Beispiel für einen varianten Record. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 04:19 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