Ich würde das für einen Compilerfehler halten...
Code:
Unit28.pas.19: firstArray := TFile.ReadAllBytes('J:\Eigene Dokumente\...');
004D3A42 8D55F8 lea edx,[ebp-$08]
004D3A45 B8A83A4D00 mov eax,$004d3aa8
004D3A4A E891F9FFFF call TFile.ReadAllBytes
Unit28.pas.20: secondArray := TFile.ReadAllBytes('J:\Eigene Dokumente\...');
004D3A4F 8D55F4 lea edx,[ebp-$0c]
004D3A52 B8343B4D00 mov eax,$004d3b34
004D3A57 E884F9FFFF call TFile.ReadAllBytes
Unit28.pas.21: Result := firstArray + secondArray;
004D3A5C A19C3AA100 mov eax,[$00a13a9c] // <-- diese Zeilen
004D3A61 50 push eax // <-- diese Zeilen
004D3A62 8B45FC mov eax,[ebp-$04]
004D3A65 8B4DF4 mov ecx,[ebp-$0c]
004D3A68 8B55F8 mov edx,[ebp-$08]
004D3A6B E87081F3FF call @DynArrayCat3
Unit28.pas.23: end;
004D3A70 33C0 xor eax,eax
004D3A72 5A pop edx
004D3A73 59 pop ecx
004D3A74 59 pop ecx
Die einzige Änderung zwischen mit und ohne der Klassendeklaration ist die Adresse in dem mov. Mit Klassendeklaration steht an der Adresse bei mir z.B. ein String mit einer Umgebungsvariable.
Eigentlich sollte da aber der Pointer auf die
RTTI des dynamischen Arrays stehen, das da verkettet wird... sprich von TBytes. Mit der Klassendeklaration stimmt dieser Zeiger nicht.
Hintergrund:
DynArrayCat3 bekommt vier Parameter, deshalb landet der vierte Parameter, also der Typpointer, auf dem Stack, daher das push.