Originariamente inviato da MItaly
Le dll C# sono bestie completamente diverse dalle dll native... una dll C# è un assembly .NET, che un'applicazione nativa non sa minimamente come gestire. Non mi risulta che da C# sia possibile esportare in maniera semplice funzioni come farebbe una dll nativa C.
C# fornisce però un metodo semplice per esportare i propri tipi e metodi tramite COM, applicando sui tipi da esportare un particolare attributo che ora come ora non ricordo e forse creando un tlb per l'assembly; d'altra parte usare COM dal C è un lavoraccio che sconsiglio.
Un'altra alternativa è creare un assembly misto C++/CLR - C++ nativo, che faccia da "ponte" tra la parte .NET e la parte nativa: da un lato la parte "nativa" della dll esporta le funzioni richiamabili dal C, dall'altra la parte .NET richiama i pezzi scritti in C#.
Esiste poi la possibilità di richiamare direttamente metodi .NET dal C++ (e forse anche dal C, con le dovute rotture di scatole aggiuntive) usando una dll COM del .NET Framework con cui chiamare (in maniera piuttosto scomoda) i vari metodi dell'assembly .NET che si vuole caricare; il procedimento non è semplice e coinvolge un sacco di "boilerplate code", che tuttavia può essere "nascosto" in una piccola libreria. In
questo articolo è spiegato il metodo "normale" e viene fornita una piccola libreria che semplifica la questione.
In ogni caso, se i tuoi client sono soprattutto codice non gestito e non si vuole usare COM scrivere una dll in C# non è una buona idea.