7

HaskellのFFIについていくつか質問があります

  1. 言語プラグマを使用する必要があることはわかっていますが、CPPで「もっと」できることを{-# LANGUAGE ForeignFunctionInterface #-}使用する場合の違いは何ですか{-# LANGUAGE CPP, ForeignFunctionInterface #-}
  2. を使用するcの関数を使用しますstructが、FFIでこれを処理するにはどうすればよいですか?
  3. 私が使用CIntしなければならないときとちょうどInt
4

2 に答える 2

6
  1. 言語拡張を有効にすると、CPPCプリプロセッサ構文をHaskellプログラムに合法的に組み込むことができます。
  2. 構造体にアクセスするのはもう少し複雑です。最も簡単な方法は、おそらく型クラスを使用て、構造体の各フィールドのメソッドStorablepeek定義することです。pokehsc2hsツールが役立ちます
  3. CIntHaskellをCとの間でやり取りする必要があるときはいつでも使用します。Intこれにより、必要なマーシャリングが確実に実行されます(CDoubleCStringなども同様です)。

X11パッケージには、FFIを介した構造体の定義とマーシャリングの多くの例があります。


詳細情報:

于 2011-05-04T19:57:23.073 に答える
3
  1. CPPCプリプロセッサです。条件付きコンパイルとマクロスを使用できます。通常、これは必要ありませんが、コンパイルするコードが外部スクリプト(autotoolsなど)によって決定されるプラットフォーム依存のコードがあるとすぐに役立ちます。
  2. c2hsを見てください
  3. Cint直接インポートにのみ使用します。Int高レベルのバインディングを作成する場合は、ユーザーが必要なライブラリをインポートする必要がなく、Haskellの標準であるため、に切り替えます。
于 2011-05-04T19:57:33.730 に答える