我在C ++中的代码是
StructureEx* obj; // structure
functionEx((void**)&obj);
我的功能是
int functionEx(void** obj); //calling function
我是CFFI的新手。所以我的问题是
如何在CFFI中实现相同目标?
如何在CFFI中找到指针的地址,指向结构的指针?
我知道可以通过
来投射到void**
ffi.cast("void*",address)
但是我如何获得该地址并传递给该函数?
答案 0 :(得分:2)
可以声明可能有用的// UITextField subclass
override func awakeFromNib() {
super.awakeFromNib()
self.addTarget(self, action: #selector(textFieldTextDidChange), forControlEvents: .EditingChanged)
}
func textFieldTextDidChange(textField: UITextField) {
textField.invalidateIntrinsicContentSize()
}
override func intrinsicContentSize() -> CGSize {
if self.editing {
let textSize: CGSize = NSString(string: ((text ?? "" == "") ? self.placeholder : self.text) ?? "").sizeWithAttributes(self.typingAttributes)
return CGSize(width: textSize.width + (self.leftView?.bounds.size.width ?? 0) + (self.rightView?.bounds.size.width ?? 0) + 2, height: textSize.height)
} else {
return super.intrinsicContentSize()
}
}
。
以下代码打印
< cdata' void *' NULL>
< cdata' void *' 0xc173c0>
7
即。首先,指针的值为零,并且在调用之后,该值对应于arg = ffi.new("void **")
中设置的值。
functionEx
from cffi import FFI
ffi = FFI()
ffi.cdef("""int functionEx(void** obj);""")
C = ffi.dlopen("./foo.so")
print(C)
arg = ffi.new("void **")
print(arg[0])
C.functionEx(arg)
print(arg[0])
ints = ffi.cast("int *", arg[0])
print(ints[7])