Question re. Call-by-value for foreign structs
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
participants (2)
-
Luís Oliveira
-
paul tarvydas