如何在CFFI中找到指向结构的指针的地址并将其转换为void **

时间:2016-07-22 15:52:28

标签: c++ python-2.7 python-cffi

我在C ++中的代码是

StructureEx* obj; // structure
functionEx((void**)&obj);

我的功能是

int functionEx(void** obj); //calling function

我是CFFI的新手。所以我的问题是

  1. 如何在CFFI中实现相同目标?

  2. 如何在CFFI中找到指针的地址,指向结构的指针?

  3. 我知道可以通过

    来投射到void**
    ffi.cast("void*",address)
    

    但是我如何获得该地址并传递给该函数?

1 个答案:

答案 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])