我有一个python,ctypes包装函数到C API,为类X取一个void *参数,例如 C:
myFunc(void* aXHandle); //where X is a class, of class X.
对于X类,我可以访问一个swigged API并且可以获得myX.this,它是SwigPyObject类型。
如何转换这个以便我可以使用ctypes并使用ctypes c_void_p作为参数来调用我的C-API函数? 在Python中,我想到的是: aXObjectThis = myX.this
myHandle = cast(aXObjectThis, c_void_p)
但这不起作用;得到“参数1中的错误类型”
答案 0 :(得分:2)
__int__
SwigPyObject
方法由SwigPyObject_long
处理PyLong_FromVoidPtr(v->ptr)
。它返回myHandle = c_void_p(int(myX.this))
,因此您应该能够使用以下内容:
_as_parameter_
更方便的是,ctypes会查找type(myX)._as_parameter_ = property(
lambda self: c_void_p(int(self.this)))
属性。您可以在实例上或作为属性设置:
myFunc(myX)
只需致电{{1}}。