2012-10-15 12 views
5

Recentemente abbiamo aggiornato il nostro codice da Delphi 2009 a Delphi XE e aggiornato i componenti di Indy (non sono sicuro se questo è rilevante).Alternativa a TXMLDocument?

Ma da allora abbiamo avuto errori sui computer Windows Server 2003 durante il caricamento e il salvataggio di file XML.

XMLDoc.LoadFromFile() 
XMLDoc.SaveToFile() 

The following is the error

Il Msvcrt.dll DLL è molto più piccolo su Windows Server 2003 (300kb o giù di lì), rispetto a più di 600kb su altri sistemi operativi ... Così la sua qualcosa che manca in quel file e la sua causa l'errore ...

Qualcuno sa come risolvere questo problema? O c'è un'alternativa allo TXMLDocument che posso provare?

+1

dai un'occhiata ai parser NativeXML o OmniXML – teran

+1

Hai capito perché si fa riferimento alla funzione correlata in virgola mobile? Sembra che tu debba presentare un rapporto qc. –

+2

Questo mi è successo spesso nelle app che dipendono dal runtime Microsoft XML. Avere una vecchia versione di MS XML causerà questo. Il fatto che ciò ti capiti su Windows 2003 Server indica che dovresti controllare il tuo MS XML lì e aggiornarlo. Tuttavia, dal momento che questo tipo di schifezze mi fa impazzire, da allora ho rimosso tutto l'uso di MSXML e non ho più preoccupazioni su MS XML. Io uso OmniXML. –

risposta

3

Per impostazione predefinita, TXMLDocument/IXMLDocument è solo un wrapper attorno alle interfacce COM MSXML quando è in esecuzione su piattaforme Windows. Né TXMLDocument né Indy utilizzano la funzione _ftol2_sse() o anche il collegamento a msvcrt.dll. Qualcos'altro nel tuo progetto è in difetto.

+0

Okay, ho usato i messaggi show per rintracciare dove si verifica l'errore e lo stesso messaggio di errore si presenta durante sia XMLDoc.LoadFromFile() che XMLDoc.SaveToFile(). Ora è possibile che questo errore si verifichi prima di queste righe e non si presenti fino ad allora o qualcosa del genere? – Trevor

+0

Non ho accesso a un server Windows 2003 in cui posso eseguire il debug del mio codice su di esso. Hai qualche consiglio su come rintracciare ciò che sta chiamando _ftol2_sse? – Trevor

+0

Okay, hai ragione, ho stabilito che XMLDoc.LoadFromFile() XMLDoc.SaveToFile() non è necessariamente la causa del problema sto avendo davvero difficoltà a rintracciare dove e perché si sta verificando questo problema. – Trevor

1

msvcrt.dll è (parte di) Microsoft Visual C++ Runtime. Penso che tu abbia una versione più vecchia (o forse anche più recente) di questo runtime che non include questa funzione.

Ora dovrai scoprire dove viene chiamata questa funzione. Collega i file obj al tuo progetto o usi (altri) dll di terze parti?

1

Per rispondere all'ultima parte ("c'è un'alternativa?"), È possibile controllare la classe TJclSimpleXML della libreria di codici Jedi. Non richiede alcuna DLL esterna, è abbastanza veloce ed è molto facile da usare. Inoltre, in questi giorni JCL e JVCL sono assolutamente indispensabili se si esegue il codice in Delphi.

http://wiki.delphi-jedi.org/wiki/JEDI_Code_Library è la loro pagina credo. Ho sentito da Seattle che puoi farlo tramite il gestore pacchetti integrato IDE.