CLI e CLR: qual’è la differenza? Studiando la documentazione del .NET Framework mi imbatto spesso nelle sigle CLI e CLR: sono sinonimi del runtime .NET? Se sì, perché usare due termini differenti? Gianfranco Risponde Alberto Falossi La Common Language Infrastructure (CLI) è un sottoinsieme delle funzionalità del Common
Language Runtime (CLR). La CLI comprende l’Execution Engine e una parte della libreria della classi (tipi
base, Reflection, XML): come si può intuire definisce i componenti essenziali per l’esecuzione di
applicazioni .NET. Il CLR è l’implementazione della CLI sotto Windows con l’aggiunta di alcune componenti
come ADO.NET, ASP.NET e Windows Forms. Upload di file con ASP Sto facendo l'upload di alcune file grafici da client utilizzando un database Access: vorrei
salvare l'immagine in una directory del mio server web (e fin qui non ci sono problemi) e salvare il path e
relativa descrizione nel database per poi richiamarli tramite ASP nel momento della visualizzazione. Antonio Risponde Andrea Chiarelli Ciao Antonio, <% 'Creazione del recordset e salvataggio delle informazioni rs.AddNew rs("codice") = 1 rs.Update Posting Acceptor aggiunge automaticamente alla collection Form dell'oggetto Request i seguenti
elementi: FileName, FilePath, FileSize, FileExtension. In particolare FileName conterrà una stringa del tipo:
"immagine, c:\percorso_del_client\immagine.gif", da cui la necessità di estrarre in modo un po'
articolato il nome del file d'immagine. <% Response.Write "<IMG SRC='" & rs("path") & "'><BR>" rs.Close: Set rs = Nothing La classe System.Convert Spettabile redazione, Emanuele Risponde Alberto Falossi La classe System.Convert espone molti metodi statici per tutte le conversioni tra tipi di dati base. Per convertire una stringa in intero devi usare: // stringa iniziale // intero a 16 bit // intero a 32 bit // intero a 64 bit Per l’operazione inversa puoi usare theString = System.Convert.ToString(i); oppure il metodo ToString presente in tutti gli oggetti .NET: theString = i.ToString(); Saluti Compatibilità binaria in COM Salve, Luca Dolciotti Risponde Marco Bellinaso Solitamente l'installazione di componenti COM (ActiveX, DLL) o di librerie condivise viene
effettuata nella directory \System di Windows. In realtà per i componenti COM questo non è un obbligo, in
quanto l'applicazione per caricarli non sa a priori il percorso fisico del file, ma lo estrae dal registro di
Windows (questo è il motivo per cui i componenti devono necessariamente essere registrati), quindi potrebbero
venire copiati in qualsiasi posto. L'installazione sotto \System è però consigliata perché evita di avere
copie multiple dello stesso file sparse per il disco fisso, che è effettivamente uno dei vantaggi dei
componenti COM. Richiamare una DLL da ASP Caro Andrea, ' creo il riferimento alla mia classe di oggetti ' creo la connessione al database ' l'istruzione che segue invoca una stored procedure, passando ' creo il riferimento alla mia classe di oggetti ' inserisco i parametri della query in un array di variant (in realtà è un arraydi
array, matrice di variant) ' l'istruzione che segue invoca una stored procedure, passando Il codice funziona correttamente se si esclude il fatto che rimane un qualche "collegamento" aperto poiché per poter aggiornare la DLL devo riavviare il Pc. Ecco l'errore che si verifica in corrispondenza dell’ultima istruzione: Errore di run-time di Microsoft VBScript errore "800a0009' Indice non incluso nell'intervallo Ho scorso non so quanti siti relativi ad ASP (e manuali) per cercare di capire dove
potesse essere l'errore, ma senza alcun risultato. Ho cercato di aggirare i possibili conflitti tra VBScript e
VB circa gli UDT, ma qualcosa deve ancora creare dei problemi. Maurizio Cocchi Risponde Andrea Chiarelli Ciao Maurizio, Session("RS") = NewObj.EstraiDati("qdfMinPezSpecDecori",4,4,arr_par()) mentre Visual Basic non ti da problemi nell'esecuzione di questa istruzione, VBScript tenta di accedere ad un elemento dell'array arr_par di cui non trova specificato l'indice. Per aggirare questo problema dovresti passare l'array senza indicare le parentesi tonde come nel seguente esempio Session("RS") = NewObj.EstraiDati("qdfMinPezSpecDecori",4,4,arr_par) Per quanto riguarda il problema di conflitto che ti viene segnalato all'aggiornamento della
DLL, è normale in quanto la DLL rimane in memoria fino a quando non viene fermato il servizio Web. Invece di
riavviare il PC basterebbe in realtà riavviare IIS o, ancora meglio, puoi abilitare dalla console di IIS
l'esecuzione dell'applicazione ASP in un processo separato e, prima di aggiornare la DLL, scaricare
l'applicazione dalla memoria (pulsante Unload dalle proprietà della cartella virtuale associata
all'applicazione ASP).
|