Forum: Programmieren allgemein
Delphi
by Zacherl,
23. Mär 2017
Ne, das ist nicht weiter seltsam. Zuerst solltest du mal die Bereichsüberprüfungen anschmeißen. Ich weiß zwar nicht, ob Delphi auch Bereichsüberschreitungen mitbekommt, die z.b. per CopyMemory ausgelöst wurden, aber einen Versuch ist es Wert.
Forum: Programmieren allgemein
Delphi
by Zacherl,
23. Mär 2017
Ob im Sign Feld immer 'ANIM' steht, kann dir wirklich nur die Doku sagen. Wenn es dir um den Zahlenwert geht, dann ja, der bleibt gleich. Es ist nur eine Frage der Darstellung:
$4D494E41 = $41 $4E $49 $4D = 'A' 'N' 'I' 'M'
Erst als 4-Byte Integer bzw. DWORD, dann als 4 einzelne Bytes und dann als 4 einzelne AnsiChars.
Forum: Programmieren allgemein
Delphi
by Zacherl,
23. Mär 2017
Ja das habe ich befürchtet. Dann hat dein richtiges Projekt irgendwo eine Memory Corruption ausgelöst, die jetzt für unvorhersehbare Seiteneffekte sorgt.
Forum: Programmieren allgemein
Delphi
by Zacherl,
23. Mär 2017
Ganz simpel:
if (anih.Sign = $4D494E41) then
begin
// Sign = 'ANIM'
end
Oder alternativ kannst du Sign auch in deinem Record direkt als array of AnsiChar deklarieren und dann die einzelnen Zeichen vergleichen. Ist vermutlich minimal langsamer, aber dafür besser verständlich.
Die Idee hatte ich auch grade und habe es getestet: Wirkt sich wie erwartet nur auf den Debugger aus. Die...
Forum: Programmieren allgemein
Delphi
by Zacherl,
23. Mär 2017
Sehr seltsam. Entweder ein Bug in D2010 oder irgendeine seltene Einstellung, die du vorgenommen hast. Naja egal, für dein Problem ja nicht weiter relevant jetzt.
Forum: Programmieren allgemein
Delphi
by Zacherl,
23. Mär 2017
Was passiert denn, wenn du mal ganz am Anfang der Funktion testweise ein ShowMessage(IntToStr(StrToInt('ANIM'))) machst? Würde mich mal interessieren.
Wenn der Header tatsächlich immer am Dateiende ist, kannst du ihn ganz einfach so auslesen und dir sowohl das Byte-Array, als auch die komische Schleife sparen:
FileStream := TFilestream.Create(wsFile ,fmopenread or fmShareDenyNone);
try...
Forum: Programmieren allgemein
Delphi
by Zacherl,
23. Mär 2017
Das ist interessant :shock: Was gibt StrToInt('ANIM') denn für einen Wert zurück? Das ist jetzt mal spannend herauszufinden.
Forum: Programmieren allgemein
Delphi
by Zacherl,
23. Mär 2017
Dann läuft irgendwas gewaltig schief, denn:
Der Header steht genau in der von dir modellierten Form (TAniHeader) direkt am Anfang der Datei?
Forum: Programmieren allgemein
Delphi
by Zacherl,
23. Mär 2017
Du liest den Header ja nirgends aus bzw. weißt deinem var Parameter niemals einen Wert zu.
Außerdem:
for IntI := Low(ByteArray) to High(ByteArray) do
begin
if (ByteArray * 4) = StrToInt('ANIM') then
Result := True
end;
:?: