agosto 2005 Blog Posts
Tutto e' nato cercando di capire come mai questo codice in C# non funziona se convertito in VB.NET: struct test { public int x; }
static void Main(string[] args) { test t = new test(); t.x = 12; FieldInfo fi = t.GetType().GetField("x"); object o = t; fi.SetValue(o, 12); t = (test)o; Console.WriteLine(t.x); //12 }il quale non fa altro che settare il campo x della struttura test via reflection...L'equivalente VB e' il seguente, e _non_ funziona: Public Structure test Public x As Int32 End Structure
Sub Main() Dim t As New test Dim fi As FieldInfo = t.GetType().GetField("x") Dim o As...
Tempo fa ho bloggato di friend assemblies e dell'attributo InternalVisibleTo, oggi un utente mi segnala che con la Beta2 l'attributo sembra non funzionare in VB 2005, ammetto che per i test fatti in precedenza avevo usato esclusivamente C# ma la cosa mi suonava comunque strana quindi decido di fare una prova veloce usando la CTP di Agosto.Risultato: Non funziona piu' nulla... ne in VB tantomeno in C#...Convinto di essere in preda all'ennesimo attacco di arteriosclerosi fulminante, mi affido a San Google e cosa scopro in questo blog? (BTW: W i blog!)“Post beta2 one more restriction is added.Only name + publicKey combination...
Dopo avere installato la CTP di Agosto ho dato un occhiata alle ultime importanti modifiche introdotte nel CLR annunciate da “Soma” nel suo blog.Gia' che c'ero ho approfondito meglio l'analisi dei nullable types cercando di trovare un alternativa in VB 2005 alla mancanza dei lifted operators presenti in C# 2.0 e gia' che c'ero ho buttato giu' un tentativo di coalescing operator generando questo “mostro”. Public Function NullIIf(Of K As Structure)(ByVal value As Nullable(Of K)) As Nullable(Of K) If (value.HasValue) Then Return value Else Return Nothing End If End Function
Che ha il difetto di operare solo sui nullable a differenza...
Se avete necessita' di mantenere sincronizzati tra loro due o piu' directories del vostro hard disk, allora e' il caso che valutiate l'utility gratuita SyncToy realizzata da Microsoft.Le azioni che SyncToy permette sui folders accopiati sono:
Synchronize: New and updated files are copied both ways. Renames and deletes on either side are repeated on the other.
Echo: New and updated files are copied left to right. Renames and deletes on the left are repeated on the right.
Subscribe: Updated files on the right are copied to the left if the file name already exists on the left.
Contribute: New and updated...
La nuova versione di Refactor (il tool di refactoring disponibile gratuitamente per Visual Basic 2005) include nuove interessanti features, se siete interessati ad una demo live direttamente da Mark Miller (Chief Architect of the IDE Tools Division at Developer Express ) potete cliccare qui: Parte 1 e Parte 2A dire il vero, sono contrario ad alcune opzioni (ad esempio quella che crea punti di uscita multipli da una funzione) pero' devo dire che le frecce disponibili con Extract Method sono molto scenografiche e, come lo stesso Miller dice, aiutano a capire quanto complesso sia il metodo e quindi passibile di revisione.
Oggi ho scoperto un interessante aggiunta alla classe Marshal di System.InteropServices nel Framework 2.0, ovvero il metodo GetDelegateForFunctionPointer.Questo metodo permette di castare un puntatore a funzione verso un delegate compatibile con la firma della funzione target, aprendo perciò la strada al dynamic P-Invoke.
Questo esempio (fatto volutamente in VB... ) dimostra come sfruttare tale metodo...
Imports System.Runtime.InteropServicesModule Demo '//Win32 functions < FONT>"kernel32")> Public Function LoadLibrary(ByVal dllName As String) As IntPtr End Function < FONT>"kernel32")> Public Function GetProcAddress(ByVal hModule As IntPtr, ByVal procName As String) As IntPtr End Function < FONT>"kernel32")> Public Function FreeLibrary(ByVal hModule As IntPtr) As Boolean End Function
'//Delegate definition Public Delegate Function sndPlaySound(<MarshalAs(UnmanagedType.LPWStr)> ByVal name...