Une idée pourquoi cette fonction ne modifie pas le paramètre 'eta' mais renvoie la valeur attendue?Julia ne modifie pas l'argument après ccall
function str2et!(date::String, eta::SpiceDouble)
ptr = convert(Ptr{ConstSpiceChar}, date)
et = Array(SpiceDouble,1)
ccall((:str2et_c,"/home/don/.julia/v0.3/cspice.so"),Void,(Ptr{ConstSpiceChar},Ptr{SpiceDouble}),
ptr,
et)
eta = et[1]
end
Juste pour clarifier: [* Les fonctions qui modifient leurs entrées ont des noms qui se terminent dans '!' *] (http://docs.julialang.org/fr/release-0.3/manual/variables/#stylistic-conventions), mais ceci est juste une convention de nommage et n'a aucun impact sur le comportement de la fonction . Ici, nommer votre fonction 'str2et!', Avec un point d'exclamation à la fin, ne le rend pas mutable. – Jubobs
... Je voulais dire * mutant *, pas * mutable *. – Jubobs
La compilation suivante, mais ne fonctionne pas. La valeur initiale de zéro est remplacée par le 2, mais le ccall ne modifie pas le champ v. 'Type Mutable valeur fin convert (type {:: Mutable}, v :: Float64) = v fonction returnViaDoublePtr() angle = Mutable (0,0) angle.value = 2 ccall ((: raxisa_c, libNasaSpice), vide, (Ptr {Float64},), pointer_from_objref (angle)) return angle.value end' – user2154643