1

良い一日!

私のプロジェクトのコアは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

ありがとうございました

4

1 に答える 1