Original asker of the question you linked here.
I've tried the struct deconstructing technique and had varying degrees of success. It seems to work fine on Windows/Linux x86, but there were a few libraries I tried this with that did not want to cooperate (for instance, I was trying to wrap libuv in CFFI back when it took/returned structs for addresses). Lots of segfaults.
However for Chipmunk, the technique worked great on Windows/Linux with SBCL, CCL, ECL. However, the Chipmunk struct had two float members so it was very basic.
I'd say in general, the more complex your struct gets, the more trouble you're asking for. Also, not sure how this would port to non x86 platforms.
Your best bet is to write your bindings, try them on each platform you're targeting, and see what breaks. Another option, if you have time, is to write your own portable C wrapper that handles the heap/stack stuff for you. I don't like this though, because it's one more step between my library and its users, but so far (barring chipmunk and old versions of libuv) I've had the pleasure of working with C libs that expect pointers.
TL;DR:
- Maybe, try it.
- No. Expect segfaults. Sometimes emailing the maintainer of the C library and asking nicely will get you pointers instead of values though =].