Qualsiasi soluzione avrà bisogno di un livello "remoto" basato su TCP/IP tra la DLL che è in esecuzione in un ambiente "simile a Windows" e la tua app Linux.
Dovrai scrivere una semplice app per PC per esporre le funzioni DLL, utilizzando un protocollo homebrew o forse i protocolli XML-RPC, SOAP o JSON. L'SDK RemObjects potrebbe aiutarti, ma potrebbe essere eccessivo.
Rimarrei con un PC "reale" o virtualizzato. Se usi Wine, è improbabile che gli sviluppatori DLL offrano alcun supporto.
È anche improbabile che MONO sia di alcun aiuto, perché la tua DLL probabilmente NON è un assembly .NET.
Ho scritto un piccolo modulo Python per chiamare le DLL di Windows da Python su Linux. Si basa su IPC tra un normale processo Python Linux/Unix e un processo Python basato su Wine. Poiché ne ho avuto bisogno in troppi casi d'uso / scenari diversi, l'ho progettato come un ctypes
"generico" sostituzione immediata del modulo, che esegue automaticamente in background la maggior parte dell'impianto idraulico richiesto.
Esempio:supponi di essere in Python su Linux, hai installato Wine e vuoi chiamare msvcrt.dll
(la libreria di runtime di Microsoft C). Puoi fare quanto segue:
from zugbruecke import ctypes
dll_pow = ctypes.cdll.msvcrt.pow
dll_pow.argtypes = (ctypes.c_double, ctypes.c_double)
dll_pow.restype = ctypes.c_double
print('You should expect "1024.0" to show up here: "%.1f".' % dll_pow(2.0, 10.0))
Codice sorgente (LGPL), pacchetto PyPI e documentazione.
È ancora un po' approssimativo (vale a dire alfa e insicuro), ma gestisce la maggior parte dei tipi di parametri (inclusi i puntatori).