Io ho sempre fatto il contrario, ovvero ho sempre richiamato da C# le funzioni di una libreria scritta in C++ (tipicamente utilizzando il Platform Invoke), ma questo post spiega come è possibile realizzare il processo inverso.
Devo ammettere che è frustrante scoprire ogni giorno nuove limitazioni del .NET Compact Framework. Capisco bene che il .NET Compact Framework può comprendere solo una minima parte delle classi e delle feature della versione Full, per una lunga serie di motivi che tutti conosciamo bene. Ma nonostante questo, quando riesco a fare una cosa con il .NET Framework e, cercando di applicarla alla versione Compact, mi accorgo che non è supportata, per un istante rimango interdetto... Di solito la mia esclamazione è la seguente: "Eh no, non è supportato neanche questo"
.
In ordine di tempo, l'ultima mia scoperta riguarda l'Asynchronous Programming Model. L'ho sempre usato senza problemi con il .NET Framework; stamattina mi serviva applicare lo stesso pattern ad un progetto per Compact Framework, ma con mio dispiacere quando ho provato ad eseguire il codice ho ottenuto una bella NotSupportedException in corrispondenza del metodo BeginInvoke. Una rapida ricerca su Google e ho trovato questa spiegazione: AsyncDelegates are supported only in the few scenarios in the current version of CF: Sockets and Async. calls to WebServices. Infatti, fino ad oggi avevo utilizzato l'APM solo per i Web Service, quindi non avevo mai notato questa limitazione!
A partire da questo indirizzo sono disponibili due video e un esauriente articolo che mostrano cosa c'è "sotto la superficie" di Microsoft Surface. Che dire, personalmente questa tecnologia mi sembra molto promettente...
Questa mi era sfuggita... Sto parlando della funzione di ricerca in linguaggio naturale inclusa in Windows Vista. L'ho scoperta per caso leggendo questo post. Incuriosito, l'ho voluta provare subito: non si devono aspettare risultati miracolosi, comunque spesso si riescono ad ottenere le informazioni desiderate.
Tra le tante feature di Visual Studio 2005 dedicate al debug, ce n'è una che prende il nome di LoaderLock managed debugging assistant (MDA):
The LoaderLock managed debugging assistant (MDA) detects attempts to execute managed code on a thread that holds the Microsoft Windows operating system loader lock. Any such execution is illegal because it can lead to deadlocks and to use of DLLs before they have been initialized by the operating system's loader.
Se il LoaderLock individua una situazione come quella descritta, interrompe il programma lanciando un'eccezione con questo messaggio:
Attempting managed execution inside OS Loader lock. Do not attempt to run managed code inside a DllMain or image initialization function since doing so can cause the application to hang.
In alcuni casi, tuttavia, esso si rivela troppo "smart" e segnala il problema anche quando, in realtà, non dovrebbe. Ho letto di questo inconveniente su diversi forum e io stesso ne sono stato vittima, tentando di creare con Visual C++ una DLL, che a sua volta richiamava una libreria di terze parti, e utilizzando poi il Platform Invoke per accedere alle sue funzionalità da un programma C#.
In una situazione del genere, si può provare a disabilitare il controllo effettuato dal LoaderLock: selezionare il comando Exceptions dal menu Debug, quindi espandere il ramo Managed Debug Assistants e disabilitare il segno di spunta nella colonna Throw in corrispondenza della voce LoaderLock. Così facendo, se effettivamente il LoaderLock aveva segnalato un problema reale, tentando di richiamare la funzione si otterrà il blocco dell'applicazione; in caso contrario (come è capitato a me), il vostro progetto tornerà a funzionare correttamente.
The Class Designer team is now looking for feedback on the product. This is your chance to help us identify key areas we should consider in future versions of the Class Designer.
Con queste parole il team di Visual C++ chiede agli utenti di ripondere alle domande di una breve indagine sul Class Designer di Visual Studio, allo scopo di migliorarne le versioni future. Per accedere al questionario, fate clic qui.