Have a look at https://common-lisp.net/project/cffi/manual/html_node/Foreign-Structure-Types.html, 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 <[email protected]> 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-client.lisp > . > > (see function "my-log", run "make" which should build and run the example, > causing a NO-APPLICABLE-METHOD-ERROR). > > thanks > pt > > >
