良い一日!
私のプロジェクトのコアはST
モナド内に書かれており、C で実装されたいくつかの機能を追加しようとしています。必要なすべての関数に FFI を実装しました。
foreign import ccall unsafe "codec/encode.h encode_symbol"
encodeSymbol :: Ptr EncodingEnv
-> CShort -- symbol to encode
-> Ptr Context
-> IO ()
Context
との両方EncodingEnv
が C ルーチン内で変更されます。と の両方の作業Storable
インスタンスがEncodingEnv
ありContext
ます。簡単なmain
テスト プログラムはうまく機能します。
それにもかかわらず、これらの C ルーチンを呼び出す必要があるコードはすべてST
モナド内にあります。Ptr
これらをどこかEncodingEnv
に保存する必要があります。Context
モナド内の長期にわたる可変C
構造をどのように処理すればよいですか? また、これらのルーチンをどのように呼び出すのですか? を使用することをお勧めしますが、これらのポインターを から取得するにはどうすればよいですか? 例やチュートリアルでそれを見つけることができません。ST
C
STRef (Foreign?Ptr Context)
malloc
ST
ありがとうございました