Una DLL è un formato utilizzato per le librerie condivise dal sistema operativo Microsoft Windows. Altri sistemi operativi utilizzano altri formati e poiché le DLL sono binari, non possono generalmente essere utilizzati su altre architetture di processori come i dispositivi ARM. Pertanto, le DLL sono di scarsa o scarsa utilità su Mac OS X, su sistemi operativi basati su Linux come Ubuntu e su dispositivi mobili (ad esempio, con iOS, Android o Windows Phone).
(il punto sulle architetture dei processori non è del tutto vero dato che i programmi C # sono in genere compilati in bytecode intermedio indipendente dall'architettura, tuttavia altre DLL non hanno questa flessibilità)
Inoltre, il codice scritto in C # richiede in genere il framework .NET o almeno il runtime .NET per funzionare. Diversi sistemi operativi Windows supportano diverse librerie .NET. Il targeting per codice del desktop potrebbe non funzionare su dispositivi mobili. Le librerie .NET di Microsoft non sono attualmente disponibili su sistemi non Windows.
Anche se la tua DLL scritta in C # sarà di scarsa utilità su sistemi non Windows, ci sono alcune possibilità per rendere il tuo codice più ampiamente utilizzabile:
-
Il progetto WINE offre un livello di compatibilità Windows per sistemi operativi di tipo Unix. A condizione che l'architettura del processore corrisponda, ciò consente agli utenti di eseguire EXE, che possono anche utilizzare DLL. Tuttavia, WINE non è un meccanismo praticabile per rendere le librerie utilizzabili. Sfortunatamente, il progetto WINE - come sforzo volontario - è in ritardo di anni nelle funzionalità di Windows.
-
Il progetto Mono offre una reimmagliatura del framework .NET e del linguaggio C # che gira su una varietà di dispositivi e sistemi operativi, inclusi Linux e dispositivi mobili. È quindi possibile ricompilare la libreria per ciascun sistema di destinazione utilizzando Mono. Tuttavia, l'implementazione Mono è in ritardo di anni, quindi non sarà possibile utilizzare le funzionalità del linguaggio moderno o aggiunte più recenti alle API .NET. Portare il codice su Mono è possibile, ma potrebbe richiedere un certo sforzo. Microsoft ha annunciato che aggiungerà il supporto per i sistemi non Windows, ma fino ad allora Mono è la soluzione migliore.
-
Se ti accontenti solo del targeting dei sistemi Windows, offri pacchetti compilati tramite NuGet. Ciò rende più semplice per gli altri programmatori C # ottenere e incorporare la tua libreria.
-
Considera la pubblicazione del codice sorgente. Ciò rende il debug molto più semplice per gli utenti della tua biblioteca e aiuta gli altri ad aiutarti. GitHub è un buon punto di partenza per utilizzare Git per il controllo della versione.
-
Dimentica C # e usa un linguaggio veramente multipiattaforma. Tuttavia, sarai sempre bloccato in un ecosistema specifico. Se si utilizza Java, la libreria può essere utilizzata solo da altre lingue in esecuzione sulla JVM (ma la JVM viene eseguita su qualsiasi sistema operativo). Quasi tutte le lingue possono facilmente interfacciarsi con una libreria scritta in C, ma scrivere C è difficile (ancora di più se vuoi che il tuo codice sia portatile).
Potrebbero esserci modi più nuovi, ma sono passati un paio d'anni dall'ultima volta che ho scritto C # ...