October 2004 Blog Posts

Registrare una typelibrary da codice

Vi é mai capitata l'esigenza di registrare una DLL/ActiveX EXE/OCX/TLB da codice?Se la risposta é sì probabilmente vi siete cimentati con un sacco di chiamate ad API, ecc. ecc.Ebbene, oggi ho visto la luce... E la luce é firmata da... (atteggiamento di grande rispetto) Francesco Balena:http://www.devx.com/vb2themax/Tip/18443 In parole povere VB 6/5 (magari anche .NET?) installano una bella DLL nel sistema:TLBINF32.DLL che corrisponde alla libreria COM: "TypeLib Information".Questa libreria espone un oggetto che vi permette di (de)registrare indifferentemente OCX/DLL/EXE/TLB/panini/pizzette/toast con una semplice chiamata ad un metodo: Dim FileNameAsStringDim TLIAsNew TLIApplicationTry  TLI.TypeLibInfoFromFile(FileName).Register()Catch  'Impossibile registrareEndTry Per deregistrare? Vediamo se avete fantasia!

posted @ Friday, October 29, 2004 4:57 PM | Feedback (0)

Registrare una DLL COM da codice con System.Reflection.Emit

Come fare a registrare una DLL COM da codice .NET?La risposta sembrerebbe ovvia: basta richiamare la funzione DllRegServer della DLL stessa... Ma come fare se a priori non conoscessimo la DLL?Reflection.Emit ci viene in aiuto:http://www.msjogren.net/dotnet/eng/samples/dotnet_dynpinvoke.asp

posted @ Friday, October 29, 2004 3:42 PM | Feedback (0)

Una nuova costituzione

Con questo post voglio salutare la firma della costituzione europea.Oggi a Roma si é fatto un passo veramente importante verso un nuovo futuro, nell'augurio che Ciampi abbia ragione e che le guerre siano veramente più lontane. So che c'é ancora molto da fare, ma questo é definitivamente una passo importante. I nostri figli studieranno il 29 ottobre 2004 a scuola come una data storica. Vi invito con me a condividere la gioia di questo evento! P.S. Per favore astenetevi da reply polemiche

posted @ Friday, October 29, 2004 2:26 PM | Feedback (2)

Regular Expression: da entries per file .config in Proprietà

Con questa Regular Expression potete trasformare in un solo colpo tutte le entries del vostro App.Config/Web.Config in proprietà VB.NET di tipo String. Il valore eventualmente specificato nell'attributo Value sarà ritornato come valore di default in caso di assenza della Setting. Parte Search:<add[\s\t\n]+key\s*=\s*"(?<Key>([^"]+?(?<TerminaleKey>([^"\.]+))))"[\s\t\n]+value\s*=\s*"(?<Value>([^"]+))"\s*((\/>)|(.*?<\/add>)) Parte Replace: Private m_${TerminaleKey} As String Public Property ${TerminaleKey}() As String Get If m_${TerminaleKey} Is Nothing Then Dim C As New System.Configuration.AppSettingsReader Try m_${TerminaleKey} = DirectCast(C.GetValue("${Key}", GetType(String)), String) Catch ex As Exception m_${TerminaleKey} = "${Value}" End Try End If Return m_${TerminaleKey} End Get Set(ByVal Value As String) m_${TerminaleKey} = Value End Set End Property Enjoy System.Text.RegularExpressions!

posted @ Wednesday, October 27, 2004 7:14 PM | Feedback (0)

Regular Expression che passione!

Per me affacciarsi al mondo .NET é stato anche affacciarsi al fantastico mondo delle regular expressions! Così criptiche, ma così potenti! Ovviamente non mi é passato inosservato il loro possibile utilizzo nella pratica di tutti i giorni, così ho creato programmino MOLTO interessante serve ad editare e salvare sequenze di Replace basati sulle Regular Expressions. Fin qui nulla di strano se non che mi sto rendendo conto che giorno dopo giorno la libreria di regular expressions che mi sto costruendo é sempre più fornita, così ho pensato che magari potrebbe fare comodo anche a qualcun'altro. D'ora in avanti posterò saltuariamente delle Regular Expressions di utilità...

posted @ Wednesday, October 27, 2004 7:07 PM | Feedback (4)

Fuori dalle balle

Da alcune settimane questo é il cartellone affisso a fianco alla nostra sede, pubblicità per un noto partito politico.Non ho parole. Voglio chiedere scusa a tutti i mussulmani che devono affrontare l'umiliazione di incontrare cartelloni come questi. L'Italia non é tutta così...Questa é inaccettabile anche come "propaganda politica"!

posted @ Wednesday, October 27, 2004 6:15 PM | Feedback (20)

Integer é System.Int32, ma Int32 non é Integer!

Avete mai provato questa espressione?Public Enum Pippo As Int32Apparentemente non c'é niente di male, ma se la mettete un file .vb vi beccherete questo errore di compilazione:I valori Enum devono essere dichiarati "Byte", "Short", "Integer" o "Long"Ovvero?Ho sempre pensato (senza mai controllare, mea culpa) che Integer fosse una import di questo tipo:Imports Integer = System.Int32Probabilmente definita nel namespace Microsoft.VisualBasicSe così fosse si potrebbe trattare di un errore nel Parser del compilatore di VB.NET......Ma l'esperienza mi insegna che prima di gridare "al bug, al bug!" é meglio darsi un'occhiata in giro.Parto dal buon san google (protettore dei programmatori) ed ecco che la prima risposta utile che...

posted @ Friday, October 22, 2004 3:13 PM | Feedback (0)

ADODB.Connection non eredita da System.Object?!

Sto scrivendo un piccolo controllo per la generazione di stringhe di connessione generiche ed ho deciso di appoggiarmi all'arcinoto oggetto (COM) Datalink della libreria MSDASC. Costruisco il wrapper e lo provo: Dim cn As New ADODB.Connection Dim UDL As New MSDASC.DataLinksClass UDL.PromptEdit(cn) Sull’ultima riga viene segnato l’errore: Option Strict On non consente conversioni implicite da "System.Object" a "ADODB.Connection". Cioé ADODB.Connection non eredita da Object? …da quanto ho capito gli unici tipi che non derivano da Object sono le interfacce. Apro l’Object browser e vedo che Connection appare come una classe. Del resto New ADODB.Connection è un’operazione legale. Apro Reflector e vedo...

posted @ Monday, October 18, 2004 11:48 AM | Feedback (0)

C# avrà l'edit & continue!

E' ufficiale! C# avrà l'edit & continue.http://blogs.msdn.com/somasegar/archive/2004/10/15/242853.aspxOnestamente, al di la di chi voglia fare il "purista" solo per partito preso mi sembra una feature che NON poteva mancare!

posted @ Saturday, October 16, 2004 11:56 AM | Feedback (1)

Productivity features in VB.NET

Come aveva sottolineato lo stesso Francesco Balena 2 ugidotnet meeting fa per C# sono state inserite in VS 2005 delle "productivity features" veramente interessanti: autocompletamento di parole chiave semplificazioni per le operazioni più comuni (per esempio scrivendo For l'intellisense potrebbe mostrare una cosa come For i as int32 = 0 to.... ecc. ecc.). Per richiedere che anche VB.NET 2005 abbia questa feature votate qui: http://lab.msdn.microsoft.com/productfeedback/viewfeedback.aspx?feedbackid=48ff251c-f0f1-4862-ac90-8824629ea7f3

posted @ Saturday, October 16, 2004 11:54 AM | Feedback (0)

La vostra opinione: Costruttore o Form_Load?

In questo post Paul Vick sta facendo un indagine se preferiamo usare il costruttore di una Windows Form piuttosto che l'evento Form_Load. Mi sembra interessante. Voi cosa usate? Perché?Io uso quasi sempre l'evento Form_Load: non mi piace andare ad immischiarmi con il codice generato dalla "progettazione windows form" di Visual Studio.Faccio eccezione se:1) Ho un parametro talmente vitale in una form che lo richiedo nel costruttore (mi sembra molto più pulito definire il costruttore con un parametro piuttosto che fare lo Shadow di Form.Show)2) Sto creando una form base per altre form: Meglio vincolare il codice importante nel costruttore che...

posted @ Friday, October 15, 2004 11:57 AM | Feedback (0)

Perché ridefinire == in una struct al posto di Equals

Faccio riferimento al mio vecchio post: public static operator dove ho decompilato la ridefinizione degli operatori == e != Ridefinendo l’operatore == C# crea un metodo apposta che riceve parametri del tipo richiesto, nello specifico caso di una struct si tratterà (probabilmente) di due oggetti “ValueType”. Cosa cambia rispetto a ridefinire Object.Equals? 1)      In Object.Equals dovremmo controllare il tipo del parametro che riceviamo. 2)      Se il parametro passato è una struct viene effettuata un’operazione di boxing!  

posted @ Wednesday, October 6, 2004 4:51 PM | Feedback (0)

MDIParent.Invoke e MDIChild.Show

Avete mai provato da una Windows Form MDIParent temporanemanete invisibile a fare lo Show di un MDIChild? Fin qui nessun problema, ma se vi trovaste all'interno di un altro thread e doveste fare lo Show del Child usando MDIParent.Invoke?Ottereste una bella:Eccezione non gestita di tipo "System.StackOverflowException" in mscorlib.dllCause: ...boh...Possibili soluzioni:Ereditate le vostre Form MDIChild da questa: Public Class BaseMDIChild   Inherits System.Windows.Forms.Form   Public Shadows Sub Show()     If Not Me.MdiParent Is Nothing Then       If Me.MdiParent.Visible Then         MyBase.Show()       Else         AddHandler Me.MdiParent.VisibleChanged, DelParentVisibleChanged       End If     End If   End Sub   Private DelParentVisibleChanged As EventHandler = AddressOf ParentVisibleChanged   Private Sub...

posted @ Tuesday, October 5, 2004 11:32 AM | Feedback (0)