I did the pointer thing like the following, to try and be somewhat size conscious: function PointerToString(instance) if ffi.abi("64bit") then return string.format("0x%016x", tonumber(ffi.cast("int64_t", ffi.cast("void *", instance)))) elseif ffi.abi("32bit") then return string.format("0x%08x", tonumber(ffi.cast("int32_t", ffi.cast("void *", instance)))) end return nil end =============================== - Shaping clay is easier than digging it out of the ground. http://williamaadams.wordpress.com https://github.com/Wiladams > Yes, thanks for the suggestion. I now just use: > > local function cdata_addr(cd) return tonumber(ffi.cast("int", cd)) end > > to produce the address' value, and use that as the key internally, to > avoid the problem of cdata objects not suitable as the key directly. > > best, > Johnson >