Haskellで書かれたライブラリをバックエンドとして使用するQt
(C++
)のアプリケーションをビルドします。 Haskell
ライブラリのインターフェイスをC++
にエクスポートするにはどうすればよいですか?C++からHaskellライブラリを呼び出す
haskellライブラリの関数がint
やfloat
のような単純な型を使用している場合、構造体を引数として使用するとどうなりますか?この場合、最もスケーラブルなソリューションは何ですか?
Haskellで書かれたライブラリをバックエンドとして使用するQt
(C++
)のアプリケーションをビルドします。 Haskell
ライブラリのインターフェイスをC++
にエクスポートするにはどうすればよいですか?C++からHaskellライブラリを呼び出す
haskellライブラリの関数がint
やfloat
のような単純な型を使用している場合、構造体を引数として使用するとどうなりますか?この場合、最もスケーラブルなソリューションは何ですか?
これらのデータ構造をHaskellで使用できるものにマーシャリングするには、haskellコードを記述する必要があります。 c2hsツールは、この点で非常に有用である:http://hackage.haskell.org/package/c2hs
ハスケルからCを呼び出すために設計されるを思わツールは、それもある意味では逆に非常に有用であるが - それはマーシャル複雑なCにあなたを可能に型をHaskell型に変換します。あなたが公開している関数はC型(通常は複雑な構造体へのポインタ)を取る必要があるので、A)適切なC構造体を構築し、B)c2hsが提供する機能を使用して、それらの構造体をHaskellにマーシャルするあなたと一緒に作業することができます。
また、c2hsスタイルで生成されたツールでは、すべてをマーシャリングする必要はありません。実際に気にしているCデータ構造の部分を調べるためのアクセサを生成するだけでよいのです。
、私はあなたがこれを使用したいと思う:foreign export ccall foo :: Int -> IO Int
よう
具体的に何かを。
詳細については、リンクを参照してください(C++プログラムへの統合方法など)。
この回答は、OPが何をするかを知っているとは何も加えていません。特に、複雑な構造の扱い方については説明していません。 – bmaderbacher
[UNIXドメインソケット](https://en.wikipedia.org/wiki/Unix_domain_socket)でIPCを行うのはどうですか? –
IPCは両方の面でマーシャリングが必要です。それはある種の解決策ですが、依然として多くの作業が必要であり、効率的ではありません。 – remdezx
私はそれを試していませんでしたが、それはあなたの役に立つかもしれません:https://github.com/wavewave/fficxx – Yuras