Hi Thorsten,
hmm, this is not correct:
> (de pnorm_both ("X" "Y" "Z" "I" "J")
> (! native `*LibRmath "pnorm_both" 1.0 (cons "X" 1.0) '("Y" (1.0 . 4))
> '("Z" (1.0 . 4)) "I" "J" ) )
"Z" is an argument to the function, so it is bound to some evaluated value.
But this value is ignored, because in
'("Z" (1.0 . 4))
"Z" is a *return* value. Also, (1.0 . 4) makes no sense here. A structure
argument is
'(Var (<size> . <returnSpec))
but 1.0 is no size (it is too big, something like 1000000) and 4 is no return
spec.
If you want to pass a buffer to receivea double (the double* in the C
signature), you would do:
(use MyDouble
(native `*LibRmath "pnorm_both" 1.0 ...
'(MyDouble (8 . 1.0)) ... )
... do something with MyDouble ...)
(8 . 1.0) allocates 8 bytes on the stack, passes the pointer to the C function,
receives a double in this place, and stores it in the symbol MyDouble.
☺/ A!ex
--
UNSUBSCRIBE: mailto:[email protected]?subject=Unsubscribe