settembre 2003 Blog Posts
Visto che e' un problema 'sentito' segnalo un interessante libreria per gestire la porta parallela da WIN 98, NT, 2000 and XP attraverso PInvoke
Jason Zander del CLR Team nel suo blog descrive dettagliatamente l'utility NGEN, da non perdere!
"Our software was prohibited by a new European wide copyright law. The industry lobby has won and we practically have lost the rights to develop and distribute our own software which we developed for 6 years."
Ecco cosa scrive Elby a proposito della decisione di non distribuire piu' il famoso programma CloneCD.
Vero e' che aggiungono anche...
"CloneCD will survive under a different team on Antigua (e.g. outside of European and American legislation) at slysoft.com. Registered users get support and updates from now on from slysoft. They will soon publish new versions of CloneCD."
Come dire... fatta la legge....
Provate ad andare su questo sito: www.kjhgdkfjsdftgius.com, non esistendo vi aspettereste il classico errore 404, invece verrete magicamente rimandati ad un nuovo progetto "SiteFinder" di Verisign.Non male come idea per attirare gente nel proprio "portale" forse pero' si e' un po' "abusato" della propria posizione e, non a caso, Verisign si e' gia' beccata una causa da 100 milioni di $$$...Se volete saperne di piu... andate qui
Dopo la mia prima sessione pubblica al workshop del 17 settembre (emozione!) mi son voluto rilassare con il mio nuovo "toy"...Commenti a caldo: Ottimo prodotto, veloce, legge di tutto (ho infilato la mano, mi ha letto pure quella...) firmware upgradabile...Prevedo un grande successo per questo genere di lettori...
Era gia' circolata la notiza... (da amici) pero' ora e' ufficiale, a causa di problemi legati alla societa' organizzatrice DIGICOMP il WinSummit 2003 e' stato cancellato, peccato, i nomi presenti erano sicuramente interessanti...
A quanto pare il vecchio Visual Studio 6 avra' un nuovo service pack...
Eseguire il subclassing in NET e' diventato un gioco da ragazzi (o quasi...) basta fare l'override della WndProc e trappare i messaggi interessati, ma se volessi intercettare il messaggio WM_LBUTTONCLICK di un pulsante presente in un form?Si puo' usare la classe NativeWindow che rappresenta una finestra generica con la relativa WndProc e "associarla" alla finestra che vogliamo subclassare.
Esempio:
public class MySubClass : System.Windows.Forms.NativeWindow{public delegate void MsgTrap (ref System.Windows.Forms.Message m);public event MsgTrap MessageTrapped;private Int32 msgCode;public MySubClass(IntPtr handle, Int32 msgCode ){this.msgCode=msgCode;base.AssignHandle(handle); }protected override void WndProc(ref System.Windows.Forms.Message m){base.WndProc(ref m);if (m.Msg==msgCode) { MessageTrapped (ref m); }}}
Questa classe, che eredita da NativeWindow, genera un evento quando viene intercettato il...
Yes!, saro' a PDC 2003 e prevedo parecchi blogs da L.A....
Come potevo non includere il logo 'ufficiale'?...
Ecco qualche utility interessante...
Snippet Compiler
Utility che vi permette di testare piccole parti di codice senza dovere nemmeno aprire Visual Studio
http://www.sliver.com/dotnet/snippetcompiler/
ApiViewer
Utility per generare la definizione di tutte le Win32 APIs in formato VB6,VB.NET e C#, include un add-in per C#disponibile anche in Italiano (richiede i runtimes di VB6)
http://www.activevb.de/rubriken/apiviewer/index-apiviewereng.html
Problemi con l'installazione di MDAC?
http://support.microsoft.com/default.aspx?scid=http://support.microsoft.com:80/support/kb/articles/Q307/2/55.ASP&NoWebContent=1
FileMon
http://www.sysinternals.com/ntw2k/source/filemon.shtml
A quanto pare gli evangelisti hanno anche il tempo per divertirsi...
Come indicato qui, Lunedì prossimo sarà possibile anche agli abbonati MSDN Universal scaricare la versione finale di Office 2003, povero server...
Non contenti dei problemi legati ai vari 'gusti' di Windows, a breve dovremo anche vedercela col pinguino... :-)
Come fare per caricare versioni diverse e compatibili tra loro della stessa dll statica?Il costruttore dell'attributo DllImport va specificato a design time quindi non possiamo modificarlo durante l'esecuzione del programma.Fortunatamente il CLR carica la Dll da disco solo se non gia' presente in memoria percio' se utilizziamo l'API LoadLibrary() possiamo decidere il percorso dove si trova la dll.
Esempio:
[DllImport("kernel32.dll")] static extern IntPtr LoadLibrary(string filename);[DllImport("mydll.dll")] static extern bool MyMessageBeep(Int32 uType);
IntPtr i=IntPtr.Zero;if (b){IntPtr i=LoadLibrary("C:\\path1\\mydll.dll");}else{IntPtr i=LoadLibrary("C:\\path2\\mydll.dll");}MyMessageBeep(0x40);
In questo caso a seconda del flag b, la funzione MessageBeep verra' invocata da una diversa dll.
Se siete interessati (oppure semplicemente curiosi) di conoscere meglio alcuni dettagli del nuovo SmartPhone SDK 2003 ecco un articolo interessante.
Se avrete il piacere di 'giocarci' un po' e dovreste trovarvi di fronte a varie "NotSupportedException" non preoccupatevi e' il modo scelto dall'SDK di informarvi che quella particolare feature non rispetta i logo requirements (es: il mainmenu di sinistra non puo' avere dei menuitems...)
Se ne e' parlato nel forum di UGI e, 'casualmente' ecco un libro sull'utilizzo di DirectX9 da applicazioni managed scritto da Tom Miller devlead del gruppo ManagedDx.
Altro libro sull'argomento quello pubblicato da Alexandre Santos Lobao su APress.
Alex Komissarov mi ha contattato segnalandomi un comportamento anomalo relativo alla Marshal.GetLastWin32Error dopo che ha modificato la mia classe seguendo i dettagli del mio blog di ieri.Dopo qualche scambio di email mi ha fatto notare che la documentazione indica che usando [DllImport] il paramentro SetLastError e' di default False per C# mentre e' True per VB.NET
Cito:Indicates whether the callee calls the SetLastError Win32 API function before returning from the attributed method.Remarkstrue to indicate that the callee will call SetLastError; otherwise, false. The default is false, except in Visual Basic.
Alla luce di vari test fatti, siamo giunti alla conclusione che la documentazione e'...
L'attributo [DllImport] che normalmente utilizziamo con PInvoke permette di stabilire se un eventuale errore deve essere corredato da informazioni estese che possiamo recuperare attraverso l'API GetLastError e la relativa FormatMessage per ottenere l'equivalente testuale del codice di errore.L'utilizzo della GetLastError non e' pero' corretto in quanto non e' detto (essendoci il CLR di mezzo) che non siano state chiamate altre API dopo la nostra funzione e della quale vogliamo recuperare il codice di errore.Il .NET Framework mette pero' a disposizione tutto il necessario per accedere nel modo corretto al codice di errore settato dalla nostra API attraverso la funzione Marshal.GetLastWin32Error().La funzione citata risolve pero'...