Heute versuche ich mein XE3-Projekt in XE4 zu kompilieren. Das erste Problem, mit dem ich konfrontiert bin, ist die Methode FTCPClient.Socket.ReadBytes() von Indy.Delphi XE4 Indy Kompatibilitätsproblem zwischen TBytes und TidBytes
Bevor es TBytes akzeptiert, besteht es jetzt auf TidBytes.
Definitionen: TIdBytes = Array von Byte; TBytes, Ich bin nicht sicher, ich denke, es ist Generika so etwas wie TArray, die Array von Byte ist.
Frage Nummer 1: Warum beschwert sich der Compiler, indem er sagt: '[dcc32 Fehler] HistoricalStockData.pas (298): E2033 Die Typen der tatsächlichen und formalen var Parameter müssen identisch sein'. Wie ich sehe, sind sie bereits identisch.
Frage Nummer 2: Sollte ich meinen Quellcode mit jeder neuen Delphi-Version ändern?
Danke.
Bibliotheken, die ihre eigenen Typen anstelle von gleichwertigen RTL-Typen erfinden, führen nur zur Ghettoisierung. Wie können wir Code schreiben, der Indy und sein Byte-Array verwendet und über sein Byte-Array mit einer anderen Bibliothek interagiert? –
Teilen Sie Embarcadero zuerst mit, dass sie ihre eigenen Produkte nicht mehr veröffentlichen dürfen, wenn sie RTL-Änderungen vornehmen. TBytes war früher ein einfaches dynamisches Array (wie TIdBytes jetzt). Es funktionierte gut mit RTTI, Objektinspektor, Compiler usw. Dann schalteten sie TBytes zu TArray und brach alles (schlechte Generics RTTI, schlechtes C++ Codegen, usw.). Denken Sie auch daran, dass Indy mehrere Sprachen unterstützt, und TArray funktioniert in C++ anders als in Delphi. Es gab also mehrere Gründe dafür, TIdBytes zu einem einfachen dynamischen Array zurückkehren zu lassen. Ich habe den Wechsel nicht leicht gemacht, und sogar Embarcadero hat empfohlen, dass ich es zu der Zeit mache. –
OK, ich bin sicher, du hattest einen guten Grund, dich zu ändern. Es fühlt sich alles falsch an, dass es 2013 immer noch Diskussionen darüber gibt, wie man mit Byte-Arrays umgehen soll. Die "richtige" Lösung, vorausgesetzt, dass alles zum Laufen gebracht werden könnte, wäre für alle Codes, 'TArray' direkt zu verwenden und so die speziellen Typkompatibilitätsregeln für generische Typen zu genießen. In einer idealen Welt gäbe es also keine "TBytes", keine "TIdBytes", und Bibliotheken könnten glücklich nebeneinander existieren und reibungslos interagieren. –