typeを明示的に指定するとこのccallが機能する理由を説明できますが、typeofを使用して型を指定すると "エラー解釈ccall引数タプル"でJuliaが失敗しますか?ccallのJulia typeof
type Foo
end
type Boo
eq::Ptr{Foo}
buf::Array{Float32,1}
s::Array{UInt8,1}
end
function new_boo(p1, p2, p3, p4, p5)
b = Boo(C_NULL,zeros(p1*2),zeros(div(p1,2)))
eqref = Ref{typeof(b.eq)}(C_NULL)
res = ccall((:myfunc, "mydll.dll"), stdcall, Cint, (Ptr{typeof(b.eq)}, Int32, Int8, Int8, Int8, Int8),
eqref, p1, p2, p3, p4, p5)
b.eq = eqref[]
b
end
私はPtr{typeof(b.eq)}
とPtr{Ptr{Foo}}
を印刷する場合、それらは同じを表示します。私がis()
と比較すると、それらは等しいです。違いは何ですか?私もv = typeof(b.eq)
を変数に代入してからPtr{v}
を渡そうとしましたが、それは役に立ちませんでした。
私が実際に持っているのは、 'struct opaque_obj **'です。これは、new_booにメモリを割り当て、呼び出し元の外部ポインタを再割り当てします。私が提供したコードは、必ずしも最善の方法ではなく、Cコールの作成方法を理解する唯一の方法でした。 – Todd
'Ptr {Ptr {Void}}'も利用できます。 –