Here's a link to exactly what you need:
I totally forgot about 0pl - That's it! Thanks for the quick response.
a thread in the archives where Alexander explains it to me...
I wasn't able to find it, but here's my attempt:
Passing a pointer reference to 'native' is similar to the integer reference
example found here: https://software-lab.de/doc/native.html#structArg.
It becomes clearer when we think of a reference (a pointer) to a pointer
instead as a buffer of 8 bytes - sizeof(*ptr) | sizeof(long) - that
contains a pointer.
We can pass this buffer to 'native' with:
(list NIL (8) (cons Ptr 8))
'native' then receives something like:
(NIL (8) (35680432 . 8))
In English, I'd read this as "a buffer of 8 bytes - that we won't need to
reference again (hence NIL) - initialized to contain our pointer, literally
'long 35680432' in C."
That's a mouthful. Let's create a naive little helper function so we don't
have to think about it anymore:
(de &ptr (P) (list NIL (8) (cons P 8)))
A bit more intuitive now:
: (setq *N (native "libzyre.so" "zyre_create" 'N "node"))
: (setq *N (native "libzyre.so" "zyre_destroy" NIL (&ptr *N)))
Look how nicely '&ptr' pairs with the global variable naming convention ;)
not that I'd ever recommend a global variable for each node on a network...