Einzelnen Beitrag anzeigen

Benutzerbild von jaenicke
jaenicke

Registriert seit: 10. Jun 2003
Ort: Berlin
9.648 Beiträge
 
Delphi 11 Alexandria
 
#5

AW: Delphi kann keine Arrays konkatenieren wenn...

  Alt 9. Feb 2015, 22:27
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.
Sebastian Jänicke
AppCentral
  Mit Zitat antworten Zitat