どのソリューションでも、「Windows のような」環境で実行されている DLL と Linux アプリの間に TCP/IP ベースの「リモーティング」レイヤーが必要になります。
Homebrew プロトコルを使用するか、XML-RPC、SOAP、または JSON プロトコルを使用して、DLL 関数を公開する単純な PC アプリを作成する必要があります。 RemObjects SDK が役立つかもしれませんが、やり過ぎかもしれません。
私は「本物の」または仮想化された PC に固執します。 Wine を使用している場合、DLL 開発者がサポートを提供する可能性はほとんどありません。
DLL はおそらく .NET アセンブリではないため、MONO も役に立たないでしょう。
Linux 上の Python から Windows DLL を呼び出すための小さな Python モジュールを作成しました。通常の Linux/Unix Python プロセスと Wine ベースの Python プロセス間の IPC に基づいています。私自身、あまりにも多くの異なるユースケース/シナリオでそれを必要としていたため、「一般的な」ctypes
として設計しました。 モジュールのドロップイン交換。これにより、必要な配管のほとんどがバックグラウンドで自動的に行われます。
例:Linux で Python を使用していて、Wine がインストールされていて、msvcrt.dll
を呼び出したいとします。 (Microsoft C ランタイム ライブラリ)。次のことができます:
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))
ソース コード (LGPL)、PyPI パッケージ、ドキュメント。
エッジの周りはまだ少し荒いですが (つまり、アルファと安全でない)、ほとんどのタイプのパラメーター (ポインターを含む) を処理します。