Oggi provo a compilare il mio progetto XE3 in XE4. Il primo problema che devo affrontare è con il metodo FTCPClient.Socket.ReadBytes() di Indy.Problema di compatibilità Delphi XE4 Indy tra TBytes e TidBytes
Prima che accettasse il tipo TBytes, ora è in attesa su TidBytes.
Definizioni: TIdBytes = matrice di byte; TBytes, non sono sicuro immagino che sia qualcosa di generico come TArray che è una matrice di Byte.
Domanda numero 1: Perché il compilatore si lamenta dicendo che '[errore dcc32] HistoricalStockData.pas (298): E2033 I tipi di parametri var effettivi e formali devono essere identici'. Come vedo, sono già identici.
Domanda numero 2: Devo modificare il mio codice sorgente con ogni nuova versione delphi?
Grazie.
Le librerie che inventano i propri tipi invece di usare tipi di RTL equivalenti portano semplicemente alla ghettizzazione. Come possiamo scrivere codice che usa Indy e il suo array di byte e interagisce con un'altra libreria usando il suo array di byte? –
Prima di dire a Embarcadero di smettere di rompere i propri prodotti quando fanno le modifiche RTL. I TBytes erano una semplice matrice dinamica (come ora TIdBytes). Ha funzionato alla perfezione con RTTI, Object Inspector, compilatore, ecc. Quindi hanno cambiato i TByte in TArray e hanno rotto tutto (difettoso RTTI generico, codegen C++ errato, ecc.). Ricorda inoltre che Indy supporta più lingue e TArray funziona in modo diverso in C++ rispetto a Delphi. Quindi c'erano molti motivi per far tornare TIdBytes su un semplice array dinamico. Non ho fatto la modifica leggermente, e anche Embarcadero mi ha raccomandato di farlo al momento. –
OK, sono sicuro che avevi buone ragioni per cambiare. Mi sembra completamente sbagliato che nel 2013 ci sia ancora un dibattito su come gestire gli array di byte. La soluzione "giusta", supponendo che tutto possa essere fatto funzionare, sarebbe che tutti i codici usassero direttamente 'TArray' e si godessero le speciali regole di compatibilità del tipo per i tipi generici. Quindi in un mondo ideale non ci sarebbero 'TBytes', no' TIdBytes', e le librerie potrebbero felicemente coesistere e interagire senza intoppi. –