ottobre 2004 Blog Posts
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!
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
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
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!
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à...
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"!
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...
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...
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!
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
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...
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!
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...