Using a void pointer in C is a safe way to provide a memory address that points to data which can be in several formats, depending on the use case.
The 'user' of this pointer is supposed to know (by means of other object's properties or the specific context) the specific data format.
I'd try to cast it to a long (NSInteger) for B4i, and cast it again to (void*) data in the OBJC side. Or, in the wrapper, create a B4i array from this data, assuming that the type is known, and return it. No idea l if any of them will work, just a guess.