Using CFFI, do I need to specify translation methods when performing call-by-value to C?
I am assuming (possibly incorrectly?) that cffi:defcstruct will create the translations for a C struct for me, then pass that struct by value to a Go foreign routine.
Specifically, I am trying to call routines in Go from Lisp using a Lisp string.
A Go string is a C struct { pointer-to-string , integer-length-of-string }
Simple test code is in https://github.com/guitarvydas/lisp-go/blob/master/string-example/lisp-clien....
(see function "my-log", run "make" which should build and run the example, causing a NO-APPLICABLE-METHOD-ERROR).
thanks pt
Have a look at https://common-lisp.net/project/cffi/manual/html_node/Foreign-Structure-Type..., in particular:
"By default, convert-from-foreign https://common-lisp.net/project/cffi/manual/html_node/convert_002dfrom_002dforeign.html#convert_002dfrom_002dforeign (and also mem-ref https://common-lisp.net/project/cffi/manual/html_node/mem_002dref.html#mem_002dref) will make a plist with slot names as keys, and convert-to-foreign https://common-lisp.net/project/cffi/manual/html_node/convert_002dto_002dforeign.html#convert_002dto_002dforeign will translate such a plist to a foreign structure."
By default, you'd invoke my-log like this: (my-log (list :str "Foo" :count 4)). That section should give you pointers on how to do something both more convenient and efficient, in case it matters.
HTH, Luís
On Fri, Dec 7, 2018 at 2:12 PM paul tarvydas paultarvydas@gmail.com wrote:
Using CFFI, do I need to specify translation methods when performing call-by-value to C?
I am assuming (possibly incorrectly?) that cffi:defcstruct will create the translations for a C struct for me, then pass that struct by value to a Go foreign routine.
Specifically, I am trying to call routines in Go from Lisp using a Lisp string.
A Go string is a C struct { pointer-to-string , integer-length-of-string }
Simple test code is in https://github.com/guitarvydas/lisp-go/blob/master/string-example/lisp-clien... .
(see function "my-log", run "make" which should build and run the example, causing a NO-APPLICABLE-METHOD-ERROR).
thanks pt