AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Object-Pascal / Delphi-Language Delphi Delphi kann keine Arrays konkatenieren wenn...
Thema durchsuchen
Ansicht
Themen-Optionen

Delphi kann keine Arrays konkatenieren wenn...

Ein Thema von Der schöne Günther · begonnen am 9. Feb 2015 · letzter Beitrag vom 10. Feb 2015
Antwort Antwort
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.880 Beiträge
 
Delphi 11 Alexandria
 
#1

AW: Delphi kann keine Arrays konkatenieren wenn...

  Alt 9. Feb 2015, 20:22
Was für eine Exception?
Funktioniert es mit der Klasse ohen abstrakte Methode?

Wenn ich mir Dein 2. Beispel anschaue vermute ich mal du wolltset im 1. ParamStr(1) statt ParamStr(0) schreiben, den ParamStr(0) ist ja die Exe selber.
Markus Kinzler
  Mit Zitat antworten Zitat
Benutzerbild von jaenicke
jaenicke

Registriert seit: 10. Jun 2003
Ort: Berlin
10.054 Beiträge
 
Delphi 12 Athens
 
#2

AW: Delphi kann keine Arrays konkatenieren wenn...

  Alt 9. Feb 2015, 21: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
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.756 Beiträge
 
Delphi 12 Athens
 
#3

AW: Delphi kann keine Arrays konkatenieren wenn...

  Alt 9. Feb 2015, 21:29
So geht's auch:

Delphi-Quellcode:
function concatenateByteS(): TBytes;
var
  resArray,
  firstArray,
  secondArray: TBytes;
begin
  firstArray := TFile.ReadAllBytes(ParamStr(1));
  secondArray := TFile.ReadAllBytes(ParamStr(1));
  resArray := TFile.ReadAllBytes(ParamStr(1));
  result := resArray;
end;
Machst du einen Bugreport dazu auf?
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
Benutzerbild von Stevie
Stevie

Registriert seit: 12. Aug 2003
Ort: Soest
4.052 Beiträge
 
Delphi 10.1 Berlin Enterprise
 
#4

AW: Delphi kann keine Arrays konkatenieren wenn...

  Alt 9. Feb 2015, 21:52
Statt der Klasse reicht auch schon:

Delphi-Quellcode:
var
  x: TBytes;
Das Vorkommen von TBytes an anderer Stelle im Interface Teil scheints da beim Codegen zu zersägen.
Stefan
“Simplicity, carried to the extreme, becomes elegance.” Jon Franklin

Delphi Sorcery - DSharp - Spring4D - TestInsight
  Mit Zitat antworten Zitat
Benutzerbild von jaenicke
jaenicke

Registriert seit: 10. Jun 2003
Ort: Berlin
10.054 Beiträge
 
Delphi 12 Athens
 
#5

AW: Delphi kann keine Arrays konkatenieren wenn...

  Alt 9. Feb 2015, 22:28
Machst du einen Bugreport dazu auf?
Habe ich mal gemacht:
https://quality.embarcadero.com/browse/RSP-10051
Die Verwendung von TArray<Byte> bringt den gleichen Fehler, das Beispiel ist so und mit Verwendung der simplen Variablen wie Stevie meinte noch simpler.
Sebastian Jänicke
AppCentral
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.756 Beiträge
 
Delphi 12 Athens
 
#6

AW: Delphi kann keine Arrays konkatenieren wenn...

  Alt 9. Feb 2015, 22:45
Der 64-Bit Compiler scheint es richtig zu machen.
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
Der schöne Günther

Registriert seit: 6. Mär 2013
6.212 Beiträge
 
Delphi 10 Seattle Enterprise
 
#7

AW: Delphi kann keine Arrays konkatenieren wenn...

  Alt 10. Feb 2015, 08:04
Erinnert irgendwie daran wie DCC32 auch dabei versagte, zwei Strings mit der selben Länge zu konkatenieren, DCC64 es aber hinbekam (siehe hier)

Danke fürs das Zusammenkürzen des Beispiels. War für mich gestern schon zu spät dafür
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 01:59 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