私は先週ほど、日常業務の一環として C# から C++ コードを実行する方法を考え出しました。それを理解するのに永遠にかかりましたが、最終的な解決策はかなり単純です.
今、私は興味があります... C# から Haskell を呼び出すのはどれほど難しいでしょうか? (注意してください: これは C#からHaskell を呼び出すことであり、その逆ではありません。したがって、メインの実行可能ファイルは C# です。)
それが本当に難しいなら、私は気にしません。しかし、それがかなり簡単なら、私はそれで遊ぶ必要があるかもしれません...
基本的に、いくつかの C++ コードを作成しました。Windows では DLL にコンパイルされ、Linux では共有オブジェクト ( *.so
) にコンパイルされます。次に、C# 側で、DllImport
自明でないものを渡そうとする場合は、手動のメモリ管理コードを作成します。(例: 配列、文字列など)
GHC が両方のプラットフォームで共有ライブラリの構築をサポートすることになっていることは知っていますが、技術的な詳細についてはよくわかりません。ものをエクスポートするための構文は何ですか?呼び出し元は最初に DLL を初期化するために何か特別なことをする必要がありますか?
具体的に言うと、 function が存在するとしますfoobar :: FilePath -> IO Int32
。誰かが以下を示す小さなスケッチをまとめてくれませんか?
- これを外の世界に公開するために、どの Haskell 宣言を書く必要があるか。
- 単一の自己完結型 DLL / SO ファイルをビルドするように GHC に指示するにはどうすればよいですか?
- 自身をバインドする通常のプロセスを超えて、呼び出し元が行う必要がある特別な
foobar
こと。
C# 側の実際の構文についてはあまり心配していません。私は多かれ少なかれそれを困惑させたと思います。
PS私は簡単に見ましたhs-dotnet
が、これはWindows固有のようです。(つまり、Mono では動作しないため、Linux でも動作しません。)