Michel, Here's a link to exactly what you need:
https://github.com/michelp/0pl/blob/master/zmq/zctx.l#L5 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")) -> 36274819 : (setq *N (native "libzyre.so" "zyre_destroy" NIL (&ptr *N))) -> NIL 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... Corrections/clarifications encouraged! Cheers, Erik