giovedì 30 novembre 2017

.Net [DllExport]

Dovendo lavorare con codice Legacy (o vintage se vogliamo...) cerco, quando posso, di riscrivere alcune funzionalità con linguaggi più moderni, o semplicemente di fare cose che non si potevano fare al tempo.
Finora, per fare un bridge tra C, Delphi, PowerBuilder e qualsiasi altro linguaggio legacy e magari un C#, ho sempre usato le interfacce COM, creando librerie in C# che esponessero l'interfaccia COM al resto del mondo.
Poi mi hanno fatto vedere che qualche santo ha trovato il modo per i linguaggi che girano su framework .Net (quindi C#, VB#, F#) di esporre funzioni come se fossero vere e proprie dll.
Il progetto si chiama DllExport e il suo uso è molto semplice: sulla funzione che si vuole esportare basta apporre l'annotazione [DllExport].
In fase di compilazione viene aggiunto uno step alla catena (per queste cose, tanto di cappello al copilatore ILASM), che fa in modo che la dll che si crea non solo rispetti la mappa degli assembly .Net, ma anche quella delle dll (vedi qui)
La dll risultante portà quindi essere vrappata come una cara, vecchia dl: ovviamente per funzionare necessiterà del Framework .Net, è ovvio.
Un solo accorgimento: la compilazione dell'assembly non può avvenire per AnyCpu, ma è obbligatorio farla per x86 o x64

Grazie al mio omonimo per la dritta, mi ha aperto un mondo.

Nessun commento:

Posta un commento