良い一日!
私のプロジェクトのコアは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構造をどのように処理すればよいですか? また、これらのルーチンをどのように呼び出すのですか? を使用することをお勧めしますが、これらのポインターを から取得するにはどうすればよいですか? 例やチュートリアルでそれを見つけることができません。STCSTRef (Foreign?Ptr Context)mallocST
ありがとうございました