withCString
fromを使用しForeign.C.String
て、HaskellC文字列を一時C文字列に変換できます。文字列は、呼び出しの開始時に割り当てられ、終了時に割り当て解除されます。
withCString s $ \c_string -> let gl_string = castPtr c_string :: Ptr GLchar
in glShaderSource a b (foo gl_string) d
CChar
文字列マーシャリング関数は型を使用し、GLは型を使用するため、キャストが必要ですGLchar
。これらは両方とも8ビットの符号付き整数であり、OpenGLライブラリもFFIも将来その文字タイプを変更しないと思います。ポインタのキャストが気になる場合は、独自のマーシャリング関数を作成できます。
ポインタ間型の場合:
これでPtr GLchar
。を作成する正しい方法はPtr (Ptr GLchar)
、OpenGLライブラリが何を期待しているかによって異なります。たとえば、ポインタの配列を期待していますか?それはfree
いくつかのポインタを必要としますか?それらの文字列のいくつかに書き込みますか?この解決策には、おそらくある程度のメモリ割り当てとポインタのコピーが含まれます。