2010-12-30 18 views
8

Il casoÈ possibile utilizzare Indy 10.5.8.0 in Delphi XE e DataSnap?

sto cercando di aggiornare l'INDY alla versione più recente per il mio Delphi XE (Update 1), così ho scaricato l'ultimo file INDY10 (Indy_4545.zip) da indy.fulgan.com/ZIP.

I pacchetti compila con successo e ora posso anche vedere la nuova versione 10.5.8.0 nella finestra di dialogo su, ma dopo un riavvio IDE ho ricevuto un messaggio che dice:

No se encuentra el punto de entrada del Procedimiento @ Idhttp @ TIdCustomHTTP @ GetRequestHeaders $ qqrv en la biblioteca de vínculos dinámicos IndyProtocols150.bpl.

mia traduzione libera di inglese:

Punto di ingresso non trovato per la procedura @ @ Idhttp TIdCustomHTTP @ GetRequestHeaders $ qqrv non trovato nella libreria di collegamento dinamico IndyProtocols150.bpl.

Dopo un rapido confronto di vecchie e nuove IdHTTP.pas ho trovato un sacco di cambiamenti sulla classe TIdCustomHttp, tra cui la ridenominazione di alcuni metodi

  • GetResponseHeaders a GetResponse
  • GetRequestHeaders a GetRequest
  • SetRequestHeaders a SetRequest

Insieme con modificati/ditte metodo pubblicato pubbliche in questo ed altri e classi interfacce.

Dopo l'aggiornamento, non ho potuto caricare molti pacchetti, incluso dclcxPivotGridOLAPD15.bpl, che a sua volta dipende da dclDataSnapServer150.bpl che incontra il metodo mancante su bpl.

AFAIK Non riesco a ricompilare dclDataSnapServer150.bpl (e forse altri pacchetti in errore, mi sono fermato qui).

DataSnap e supporto DevExpress sul IDE è un must per il mio giorno in giorno in modo

Le domande

  1. C'è un percorso prestabilito sicuro per l'aggiornamento alla più recente INDY per Delphi XE?
  2. In caso contrario, sono al sicuro solo parziando il codice sorgente creando i vecchi metodi pubblici e richiamando quelli nuovi sulla parte di implementazione?
  3. Mi manca qualcos'altro o sono davvero bloccato con INDY 10.5.7 fino alla successiva versione di Delphi minor/major?

risposta

4

dalle risposte degli altri e soprattutto i commenti di Remy:

Non è possibile installare Indy 10.5.8.0 senza rompere DataSnap in Delphi XE aggiornamento 1.

+3

È possibile, è sufficiente conservare una copia dei pacchetti originali spediti con l'IDE, o installare una copia separata dell'Indy aggiornato. Quindi modificare le impostazioni del progetto per utilizzare i pacchetti originali nei progetti DataSnap e utilizzare i pacchetti aggiornati in altri progetti. –

+0

@Remy: Ciò che hai detto è accurato, mi è successo che il 99% dei miei progetti rilevanti utilizza DataSnap, quindi è bello avere un INDY aggiornato per i giocattoli, ma sarebbe più bello averlo per ciò che conta. – jachguate

+1

Sono stato informato da Embarcadero che esamineranno la possibilità di rendere DataSnap in grado di consentire gli aggiornamenti di Indy senza interruzioni. –

2

Anche se io non uso Delphi XE me stesso, ma la versione 2010. Sono stato in grado di aggiornare i componenti di Indy alla versione più recente, con l'aiuto di questo post Stack Overflow: Step by step upgrade of Indy 10 in Delphi 2009

So che la domanda è per il 2009 (ma la risposta copre anche il 2010), ma ha funzionato per me in versione 2010, quindi la mia ipotesi è che ti aiuterà anche. Ti consiglierei di leggere i commenti, dato che ci sono anche alcuni suggerimenti interessanti. Spero che questo ti aiuti.

+0

Grazie, non sapevo questa domanda, ma seguenti la mia procedura (e sto cercando di scrivere un articolo per il mio blog sull'aggiornamento). Come detto, il problema non è con la compilazione/installazione, ma perché le interfacce sono cambiate e altri pacchetti hanno dipendenze da quelle precedenti. Grazie per la tua risposta, dura. – jachguate

+0

Quando ho aggiornato Indy ho dovuto modificare manualmente i file di progetto per utilizzare la nuova versione di Indy. Questo può essere un po 'complicato e causare errori se dimenticato. –

7

AFAIK stai per perdere alcuni pacchetti che dipendono fortemente dalla versione di Indy implementata con Delphi, in particolare dal nuovo Datasnap.

Si può provare a costruire i propri pacchetti Onwn invece di quelli standard che non possono essere ricompilati, purché siano disponibili tutte le unità necessarie.

IMHO Embarcadero dovrebbe trovare una soluzione sul proprio codice in base a una libreria "instabile" come Indy. Ciò non è accettabile in un ambiente professionale, soprattutto perché non sono in grado di rilasciare aggiornamenti ufficiali, comprese le correzioni di bug di Indy dopo alcuni mesi dal rilascio. Ad esempio, ho trovato recentemente che l'analisi dei messaggi di Indy 10.5.5 taglia gli indirizzi di posta, cosa che non accade in 10.5.8. Naturalmente il comportamento 10.5.5 non è accettabile, sono costretto a passare ...

+0

L'errore che hai visto è dovuto al fatto che altri pacchetti (come Datasnap) dipendono dal pacchetto indy fornito con il prodotto. Se vuoi cambiare la versione di Indy, devi disinstallare alcuni degli altri pacchetti che dipendono da loro. Eliminare il vecchio IndyProtocols150.bpl dalla cartella BPL e vedere cosa altro non riesce a caricare e disinstallare tutti i pacchetti interessati prima di riprovare. –

+2

Disinstallare pacchetti dipendenti come dclDataSnapServer mi sembra un problema, soprattutto perché uso DataSnap sui miei progetti attuali. Una soluzione migliore sarebbe quella di avere una nuova versione compatibile per ogni versione di Indy, o di avere versioni minori compatibili con Indy. Di maledizione nessuno di questi è nelle nostre mani ... Forse dovrò sostenere l'Embarcadero per questo. – jachguate

+4

Il vero problema è che Indy non dovrebbe apportare modifiche di rottura in una determinata versione. IMHO Indy manca davvero di una corretta gestione delle release e Embarcadero dovrebbe assumerne il controllo, a causa delle dipendenze nel proprio codice. Potrebbero essere apportate modifiche alle ultime versioni, ma minori dovrebbero solo aggiungere correzioni o funzionalità che non richiedono modifiche alle interfacce effettive. Altrimenti impazziscono per qualsiasi sviluppatore che cerca di costruire librerie usando Indy (ad esempio, EldoS SecureBlackBox ha lo stesso problema con Indy). Probabilmente Embarcadero dovrebbe sborsare Indy e fare qualcosa al riguardo. –

12

[Installazione di Indy per Delphi XE]

Sì, il processo di installazione è noioso, ma ne vale la pena per ottenere è fatto bene

Questo è per tutti i componenti di Indy ad eccezione di SSL. (Non ho ancora provato nessuno dei file SSL.)

A.) Cercare e distruggere tutti i file Indy forniti con Delphi. Si tratta di non valido in quanto il progetto Indy viene aggiornato ogni giorno con nuove correzioni di bug. Se Delphi preleva uno dei vecchi file al posto della nuova nuova libreria Indy, , si verificheranno errori impazziti dall'IDE in tutti i momenti diversi che sono molto difficili per la traccia .

i. Vai a Componente -> Installa pacchetti, quindi rimuovi completamente tutti i pacchetti che iniziano con "Indy".

ii. Chiudi Delphi.

iii. Cancella tutti i file che corrispondono a "dclIndy * .bpl" e "Indy * .bpl" dalla cartella Bin di Delphi.
(C: \ Programmi \ Embarcadero \ RAD Studio \ 8.0 \ bin)

iv. Cancella tutti i file che corrispondono a "Indy * .dcu" e "Id * .dcu" ^^^ nelle sottocartelle Lib di Delphi.
(C: \ Program Files \ Embarcadero \ RAD Studio \ 8.0 \ lib \ win32 \ debug)
(C: \ Program Files \ Embarcadero \ RAD Studio \ 8.0 \ lib \ win32 \ stampa)
^^^ Attenzione : guardare fuori per non Indy DCU che capita di iniziare con le lettere "id" come "idispids.dcu" e "idoc.dcu"

v Eliminare l'intera cartella di origine Indy10:.
(C: \ Programmi \ Embarcadero \ RAD Studio \ 8.0 \ source \ Indy10)

B.) Scarica l'ultimo Indy10_XXXX.zip da http://indy.fulgan.com/ZIP/ (Se ottieni un errore di compilazione o un errore di runtime utilizzando questo file zip per uno dei passaggi qui sotto - non scoraggiarti! Riscrimi il file zip il giorno seguente e prova nuovamente a . Questo file zip viene aggiornato ogni giorno e c'è la possibilità che ci possono essere alcuni errori/bug in un dato giorno.)

C. Estrarre solo le cartelle System, Core e Protocols nella propria cartella della libreria Indy. ex.
(c: \ MyDelphiComponents \ Indy \ Core)
(c: \ MyDelphiComponents \ Indy \ System)
(c: \ MyDelphiComponents \ Indy \ Protocols)

D.) lancio Delphi. Ignora tutte le finestre di dialogo del pacchetto non riuscite: questi sono i pacchetti Embarcadero che si basano su Indy! (Basta cliccare Ok su tutti gli errori, e indicano che non riusciti pacchetti non dovrebbero essere caricati di nuovo.)

E.) Vai a Opzioni -> Opzioni Ambiente -> Opzioni Delphi -> Navigazione Path - Rimuovere i percorsi che iniziano con $ (BDS) \ lib \ Indy10

F.) Vai a Opzioni -> Opzioni Ambiente -> Opzioni Delphi -> Libreria Path - Aggiungi il tuo nuovo sistema, core, e le cartelle dei protocolli dal punto C al percorso della libreria di Delphi.

G.) eseguire le seguenti 5 azioni per: (Basta dire OK per eventuali finestre di dialogo circa l'aggiornamento del progetto)


. Importante:

Dopo aver caricato ogni dpk e prima ogni generazione, vai a:

Progetto -> Opzioni -> Descrizione -> Crea controllo

Impostare il pulsante di opzione su "Ricostruzione esplicita".

(In realtà, questo è facoltativo, ma ho sempre fare pacchetti esplicita Ricostruisci perché sembrano più facili da gestire in questo modo, ma mi piacerebbe sentire cosa altri a riflettere su questo ...)


  1. Build - System \ IndySystem150.dpk
  2. Build - core \ IndyCore150.dpk
  3. la costruzione di prima, poi Install - core \ dclIndyCore150.dpk
  4. Build - Protocols \ IndyProtocols150.dpk
  5. la costruzione di prima, poi Install - Protocols \ dclIndyProtocols150.dpk

** assegno doppio che hai impostato "esplicita Rebuild" su tutti i pacchetti! **

H.) Infine, andare a Component -> Installa pacchetti e trovare tutti i pacchetti che si basano su Indy che sono stati spento durante la fase D. riattivarli, e riavviare Delphi. (Se il vostro nuovo Indy non è cambiato troppo da quello rilasciato con Delphi, quei pacchetti useranno la nuova Indy!)

++ Nota, non si può ricevere eventuali errori subito alla riattivazione quelli Embarcadero pacchetti, ma possono comparire in momenti casuali più tardi.Ad esempio, ho appena installato Indy10_4548.zip e tutti i pacchetti riattivati ​​sembravano soddisfacenti. Quindi, il giorno dopo, dal il blu, l'IDE mi ha lanciato un messaggio che diceva che non riusciva a trovare GetRequestHeaders in TIdCustomHTTP e che il dclWindowsAzureManagement150.bpl aveva problemi come risultato . Quindi ho dovuto tornare indietro e disabilitare quel pacchetto di Windows Azure nell'IDE.

+0

Grazie per la tua risposta .. la mia domanda riguarda solo la tua ultima parte e non il processo di installazione di new indy stessa, ma come ho detto nella mia domanda, è obbligatorio avere dclDataSnapServer150 perché i miei progetti si affidano a DataSnap, quindi cosa hai scritto è, alla fine, la stessa domanda e non una mia risposta. – jachguate

+0

DataSnap utilizza Indy, ma poiché DataSnap non può essere ricompilato, può utilizzare solo la versione di Indy fornita con l'IDE. Per qualsiasi progetto che usi DataSnap, dovrai mantenere i pacchetti originali di Indy. Poiché l'IDE consente di abilitare/disabilitare i pacchetti in base al progetto, è possibile utilizzare i pacchetti originali di Indy per i propri progetti DataSnap e i nuovi pacchetti di Indy per altri progetti. Basta installare i pacchetti in diverse cartelle. –