Ormai con C# ed VB.NET sempre più spesso dobbiamo ricorrere alle API contenute nelle dll di sistema per avvalersi di una particolare funzione che nel linguaggio in cui stiamo programmando non è definita, ed qui ci viene in soccorso P/Invoke con DllImport, ma non sempre ci ricordiamo l’interfaccia di quella specifica API, e cosi si parte con la ricerca in rete magari in msdn o altrove, questo però non e produttivo in quanto è tempo che stiamo perdendo, senza contare che perdiamo il filo del lavoro (almeno per me è cosi ).
Per rimediare a tutto questo possiamo adottare in Visual Studio una tecnica che SharpDevelop usa già, ed con grande successo; Sto parlando del famoso programma della red-gate PInvoke.net tuttora già integrato in SharpDevelop ma che esiste anche in forma Add-In per Visual Studio .NET il sito web da dove potete scaricarlo è :
http://www.pinvoke.net/
Oltre al programma il sito offre un gran numero di informazioni sulle API, chiunque può contribuire documentando API non ancora inserite nel già molto fornito database del sito.
Vi assicuro che vale la pena di provarlo, sopratutto per chi le API di windows sono all’ordine del giorno !
Quante volte vi sarebbe servito creare una dll in C# con metodi richiamabili da altri programmi scritti in linguaggi differenti, usandola come se fosse una vera e propria dll creata in C++ (cioè unmanaged), richiamandola poi con P/Invoke in un progetto C#, ma tutto questo il C# e VB.NET non lo permette e per farlo bisogna ricorrere a qualche stratagemma.
Ora ci sono due strade che si possono prendere:
La prima è andare a disassemblare l’assembly generato e alterandone il codice IL per poi ricompilarlo nuovamente nell’assembly definitivo, ma si tratta indubbiamente di un’operazione abbastanza complicata e sicuramente poco praticabile se non per cercare di capirne i meccanismi, per avere più informazioni a riguardo consiglio la lettura di questo link che spiega per filo e per segno i meccanismi di questa tecnica permettendomi di andare già oltre.
La seconda strada è indubbiamente più semplice, ma non per questo meno funzionante anzi alla fin fine raggiungeremo lo stesso risultato, in particolare utilizzeremo un’utility chiamata dll_tool (il download include anche il sorgente).
Supponiamo quindi di avere creato un progetto di tipo libreria di classi ed avere un qualsiasi metodo, in questo caso molto semplice , simile al seguente:
public static class ProvaDll
{
public static int Somma( int a, int b )
{
return a + b;
}
}
A questo punto generiamo la nostra DLL e apriamola con dll_tool, noteremo nella lista dei metodi il nostro “Somma()” che potremo spostare nella lista degli export:
A questo punto generiamo la string table e infine compiliamo nuovamente la DLL con il pulsante build (verrà chiesto dove e con che nome salvare la nuova DLL) e il gioco è fatto, la nostra DLL potrà essere C++.
Ora per usarla per esempio in C# dobbiamo solo fare :
[DllImport("MyDll.dll")]
public static extern int Somma( int a, int b);
MessageBox.Show( Somma( 20, 55) );
Ed il gioco è fatto !
Ciao, oggi vi scrivo per domandare un aiuto a tutti i programmatori C# che vogliono contribuire allo sviluppo di un progetto (a mio modesto parere alquanto carino), il progetto in questione riguarda nientemeno la creazione di un nuovo sistema operativo che (almeno per ora) non è ancora tanto conosciuto, sto parlando di SharpOS un sistema operativo scritto completamente in linguaggio C# , il progetto è nato solo pochi mesi fa (il Settembre 2006) come alternativa (o concorrente?) a Microsoft Singularity, quindi per chi potesse interessare a contribuire al progetto non resta che andare nel sito web http://www.sharpos.org/ scaricare i sorgenti e seguire le indicazioni che troverete.
Ciao, volevo solo segnalare due link che trovo siano utili a chi sta incominciando a programmare :
- Il primo link è quello del Prof. camuso che conta (al momento che sto scrivendo) circa 54506 visite, nel sito si possono trovare delle videolezioni su un bel po’ di argomenti, tra questi : una serie completa sul linguaggio C# e Visual Studio 2005 Express, sul Delphi, sulla OOP in generale, sulla SQL, sull’ASP, sul Pascal, sul C++ e tanti altri argomenti interessanti, vi posso assicurare che le video lezioni sono veramente ben fatte sia come qualità video-audio che come sono strutturate.
- Il secondo link che voglio segnalare è DocentiPuntoOrg, nel quale si possono al C#e dei corsi scritti da veri e propri insegnanti specializzati in diverse materie e diversi cicli scolastici, nel sito si può trovare anche una guida al C# che è ancora in fase di sviluppo.
P.S. : Queta è la prima volta che uso IMHO spero di aver fatto tutto giusto !
Il .NET Framework 3.0 o WinFX !
Incominciamo col scoprire insieme quali caratteristiche e miglioramenti nel campo della programmazione e non solo ci ha portato il nuovo ma già molto usato Framework 3.0 precedentemente noto con il nome in codice WinFX, che Microsoft ha deciso di integrare con il nuovo sistema operativo Windows Vista.
Il Framework 3.0 e scaricabile http://www.microsoft.com/downloads/details.aspx?displaylang=it&FamilyID=10cc340b-f857-4a14-83f5-25634c3bf043, naturalmente per riuscire ad installarlo bisogna soddisfare i requisiti minimi che trovate sempre nel link da dove lo potete scaricare.
Un altro link molto interessante che vi voglio segnalare è http://msdn.microsoft.com/msdntv/episode.aspx?xml=episodes/en/20031107WINFXBA/manifest.xml , nel quale potete vedere un video (in inglese) che descrive le caratteristiche di WinFS.
Se vi interressa approfondire l’argomento di Windows Vista potete guardare i Webcast specifici di questo argomento, che potete trovare http://msdn.microsoft.com/msdntv/episode.aspx?xml=episodes/en/20031107WINFXBA/manifest.xml .
Bene allora incominciamo a vedere le principali caratteristiche del Framework 3.0, quello che secondo me si può gradire di più sul buon lavoro di sviluppo che hanno fatto sul nuovo Framework è di certo la totale compatibilità con Windows XP e con i software sviluppati con i Framework precedenti.
Il Framework 3.0 è una estensione del framework 2.0 nel quale i sviluppatori hanno inserito tre nuovi componenti che sono :
· WinFS: un file system relazionale;
· Windows Presentation Foundation (nome in codice Avalon): un nuovo sistema grafico;
· Windows Communication Foundation (nome in codice Indigo): un sistema di comunicazione e messaggistica.
Per capire meglio il concetto le andremmo ad osservare tutte e tre, più altre che nel mondo di noi sviluppatori fa sempre bene sapere :
- Windows Presentation Foundation, conosciuto con il nome in codice di Avalon: è la parte che in WinFX contiene tutte le funzionalità destinate al presentation layer;
- Windows Communication Foundation, conosciuto con il nome in codice di Indigo: rappresenta tutte le funzionalità dedicate alla comunicazione, con un sotto-framework completamente unificato in grado di garantire lo stesso modello ad oggetti a prescindere dal transportation layer utilizzato, sia MSMQ piuttosto che web services;
- Windows Workflow Foundation: fornisce l'infrastruttura necessaria alla creazione di applicazioni che implementino logica basata su workflow;
- Infocard: nome in codice del subsystem dedicato alla gestione dell'identità e delle politiche di sicurezza dell'accesso alle informazioni;
- WinFS: il componente di WinFX più discusso, è un file system aggiuntivo rispetto a NTFS, che garantisce un'indicizzazione più ricca dei contenuti grazie all'utilizzo di un modello ad oggetti estensibile, basato sugli schema, che consente di collegare tra di loro attraverso relazioni oggetti di tipo comune. Sarà rilasciato successivamente, come add-on;
- Expression: ultimo pezzo del puzzle, è l'insieme di alcuni tool pensati in maniera specifica per la creazione di applicazioni basate soprattutto su Windows Presentation Foundation (WPF).
Come avrete sicuramente capito c’è molto di cui discutere su questo argomento, però il tempo non basta mai quindi per oggi ci fermiamo qui, facendo la promessa che nei prossimi giorni riprenderò l’argomento continuando a parlare del Framework 3.0 e dei suoi pregi che sicuramente qualunque programmatore apprezzerà.
La prossima volto parleremo del nuovo linguaggio XAML e delle sue caratteristiche che abbinato con il linguaggio della Microsoft C# si possono creare delle vere e proprie bombe di applicazioni, intanto vi segnalo un paio di link che possono essere utili :
Qui potete saperne di più sull’ XAML: http://www.xamldev.com/
E per ultimo ma non di importanza vi segnalo un fantastico link dove potete vedere un video di Longhorn il cui presenta le principali caratteristiche sul WinFS e sul XAML, vi consiglio vivamente di dagli una occhiata perché ne vale veramente la pena J:
Il link è: http://msdn.microsoft.com/msdntv/episode.aspx?xml=episodes/en/20031028LHORNDB/manifest.xml
Ciao a tutti e alla prossima ;-)