C#
Segnalo quest'illuminante post del grande Balena:
Usare il string intern pool per scrivere codice
più
efficiente
IMHO tecnica assolutamente da adottare quando si manipolano grandi
quantità di stringhe in memoria.
powered by IMHO
posted @ giovedì 29 settembre 2005 16:14 |
Segnalo questo controllo con licenza LGPL che consente di
embeddare internet explorer senza doversi portare in giro la "pesante"
mshtml.dll. Tra l'altro credo sia anche utilizzato nel progetto RSS Bandit
powered by IMHO 1.2 with Emoticon Formatter
posted @ giovedì 31 marzo 2005 14:46 |
Questa non la sapevo ed è stata una scoperta
interessante e molto utile.
Internet Explorer supporta diversi protocolli, tra cui il protocollo res (Qui un articolo interessante del lontano gennaio 1999
di Dino
Esposito). Il protocollo res consente di estrarre
una risorsa Win32 da una dll o da un eseguibile. Quindi, se per esempio abbiamo
un'applicazione che ospita Internet Explorer (ad es. IMHO
), possiamo dare in pasto al browser qualsiasi tipo di file senza
renderlo facilmente fruibile...
posted @ giovedì 31 marzo 2005 09:41 |
Problema: il nostro codice utilizza un assembly che non risiede nè nella directory dell'eseguibile nè in una sua sottodirectory (Infatti se di sottodirectory si trattasse sarebbe sufficiente utilizzare il metodo System.AppDomain.CurrentDomain.AppendPrivatePath).
Soluzione: utilizzare un file di configurazione.Aggiungiamo un file di configurazione al nostro progetto. Per automatizzare la build aggiungiamo la seguente direttiva post-build alle proprietà di progetto:
copy app.config "$(TargetPath).config"
(Chissà perchè vs non lo fa da se)Nel file config aggiungiamo quindi la sezione necessaria per linkare gli assembly:
<?xml version="1.0" encoding="utf-8" ?><configuration> <runtime> <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1"> <dependentAssembly> <assemblyIdentity name="AssemblyName" culture="neutral" publicKeyToken="ab9f21381c07889c" /> <codeBase version="1.0.0.0" href="FILE://c:/Programmi/myAssembly/AssemblyName.dll" /> </dependentAssembly> </assemblyBinding> </runtime> </configuration>
Come si vede è necessario indicare anche la publicKeyToken. Per estrarla possiamo fare uso dell'utility sn con il parametro -T. Ok... questo è tutto nel caso in cui l'assembly...
posted @ lunedì 21 marzo 2005 09:13 |
Ieri mi sono scontrato con il problema di
generare un file di trace di un'applicazione.
Il mio pensiero è subito volato verso le Enterprise Library, finalmente l'occasione di
utilizzare questo gioiello della scienza e della tecnica. Durante il workshop
del 2 dicembre (Architecture & Management) ero rimasto affascinato
dagli Application Blocks, tanto (giustamente) decantati dal nostro Lorenzo. Dopo l'uscita della versione 1.0 delle EL non vedevo l'ora di avere
l'occasione per buttarmici sopra. Ma con il senno di poi mi rendo conto che
l'occasione non era questa.
Infatti, man mano che approfondivo
l'argomento mi rendevo sempre più conto che le EL sono eccezionali, ma nel
mio...
posted @ venerdì 25 febbraio 2005 10:30 |
In caso di necessità di generare lo schema partendo da
un'xml dato:
DataSet ds = new DataSet();ds.ReadXml(@"c:\XmlOrigine.xml");ds.WriteXmlSchema(@"c:\Schema.xsd");
Molto banale. Ovviamente utilizzando i soliti memory
stream è possibile fare il tutto in memoria senza passare per il file system.
powered by IMHO 1.2 with Emoticon Formatter
posted @ venerdì 11 febbraio 2005 12:46 |
Per chi è abituato ad utilizzare le Api segnalo un interessante articolo che mappa le funzioni offerte dalle
api alle corrispondenti classi/metodi presenti nel framework (Se
esistono).
Fonte:Win32
API
powered by IMHO 1.2 with Emoticon Formatter
posted @ martedì 8 febbraio 2005 14:48 |
Come stampare una pagina html senza far apparire la finestra di selezione della stampante?
La soluzione che ho adottato comporta l'inclusione dell'activeX di Internet Explorer nel codice (Componente COM Microsoft Web Browser). Altre soluzioni fanno sempre apparire quella dannata printer dialog.
Siccome l'html viene generato dinamicamente navigo sull'about:blank:
Object n = System.Reflection.Missing.Value;axWebBrowser1.Navigate("about:blank", ref n, ref n, ref n, ref n);
Sull'evento NavigateComplete2 vado ad iniettare l'html dentro l'oggetto:
private void axWebBrowser1_NavigateComplete2(object sender , AxSHDocVw.DWebBrowserEvents2_NavigateComplete2Event e){ object[] psa = {this.Html}; // Variabile Stringa che contiene l'html mshtml.IHTMLDocument2 hDoc2 = (mshtml.IHTMLDocument2)axWebBrowser1.Document; hDoc2.clear(); // Pulisco la pagina hDoc2.write(psa); // Scrivo il contenuto hDoc2.close(); // Chiudo la pagina}
A questo punto chiamo il seguente metodo per stampare la pagina senza richiesta di selezione da parte dell'utente (stampante di default). Il terzo parametro della ExecWB serve per far si che il thread resti in attesa fino a completamento della stampa, in questo modo siamo certi che...
posted @ giovedì 3 febbraio 2005 10:38 |
Una dura giornata di lavoro basato su ricerca (grande
Google) e test a manetta ha portato i suoi frutti.
La soluzione (come sempre) non era poi così difficile come sembrava. Mi ha
portato sulla buona strada il post
di un blog (Modificando l'esempio
riportato si riesce ad ottenere un server com singleton che non sia un
servizio). Probabilmente non sarà l'unica soluzione, e forse nemmeno la
migliore... ma intanto una soluzione esiste!!
Prossimamente seguirà un articolo sul tema (nonostante l'interesse per
l'argomento non appaia particolarmente sentito... 40 Web Views e 4 commenti
off-topic alla
mia precedente disperata richiesta di
aiuto)
powered by IMHO...
posted @ giovedì 20 gennaio 2005 20:14 |
Ok, cedo.
Ho capito come creare un buon server com in C#, eventi compresi. Ma come faccio a fare in modo che il server com sia singleton?
Ogni minimo spiraglio di luce è gradito!!
powered by IMHO 1.1 with Emoticon Formatter
posted @ mercoledì 19 gennaio 2005 19:48 |
Full C# Archive