Может кто-нибудь объяснить, почему этот ccall работает, когда я явно указываю тип, но Julia терпит неудачу с "интерпретацией ошибок ccall аргумент tuple", когда я использую typeof для указания типа?Julia typeof in ccall
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}}' также доступен. –