ManuelFinessi

Finessi Manuel WebLog
posts - 7, comments - 58, trackbacks - 8

Creare DLL unmanaged in C# è possibile ?

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:

 

       screenshot

 

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 !

Print | posted on mercoledì 23 maggio 2007 21:43 |

Feedback

Gravatar

# kamagra oral jelly sildenafil citrate sen

kamagra shop deutschland erfahrung 2015
kamagra 100mg
kamagra jelly usa
[url=http://kamagraonl.com/]buy kamagra 100 mg[/url]
kamagra oral jelly
http://kamagraonl.com/
kamagra oral jelly suppliers india
09/05/2018 21:22 | Michaelbeple
Gravatar

# kamagra 100 chewable review sen

kamagra oral jelly made in india
kamagra 100 mg oral jelly
kamagra 100mg chewable tablets
[url=http://kamagraonl.com/]buy kamagra 100 mg[/url]
kamagra 100mg tablets
http://kamagraonl.com/
kamagra gold teeth
10/05/2018 14:15 | Marionurive
Comments have been closed on this topic.

Powered by:
Powered By Subtext Powered By ASP.NET