> I generally avoid c_void_p because its lenient from_param method > (called to convert arguments) doesn't provide much type safety. If a > bug causes an incorrect argument to be passed, I prefer getting an > immediate ctypes.ArgumentError rather than a segfault or data > corruption. For example, when a C API returns a void pointer as a > handle for an opaque structure or object, I prefer to handle it as a > pointer to an empty Structure subclass, as follows: > > class _ContosoHandle(ctypes.Structure): > pass > > ContosoHandle = ctypes.POINTER(_ContosoHandle) > > lib.CreateContoso.restype = ContosoHandle > lib.DestroyContoso.argtypes = (ContosoHandle,) > > ctypes will raise an ArgumentError if DestroyContoso is called with > arguments such as 123456789 or "Crash Me".
After typing up a response with all the detail, your reply helped me see the error. Thank you so much for all that detail, it was very much appreciated! jlc -- https://mail.python.org/mailman/listinfo/python-list