如何在 CFFI 中找到指向结构的指针的地址并将其转换为 void**
Posted
技术标签:
【中文标题】如何在 CFFI 中找到指向结构的指针的地址并将其转换为 void**【英文标题】:How to find address of a pointer to structure and cast it to void** in CFFI 【发布时间】:2016-11-26 14:36:28 【问题描述】:我的 C++ 代码是
StructureEx* obj; // structure
functionEx((void**)&obj);
我的功能是
int functionEx(void** obj); //calling function
我是 CFFI 的新手。所以我的问题是
如何在 CFFI 中实现同样的效果?
CFFI中如何找到指针、结构指针的地址?
我知道投射到void**
可以通过
ffi.cast("void*",address)
但是我怎样才能得到那个地址并传递给函数呢?
【问题讨论】:
【参考方案1】:可以声明arg = ffi.new("void **")
可能可用。
以下代码打印
7
即首先指针的值为零,调用后的值对应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])
#include <stdio.h>
#include <stdlib.h>
int functionEx(void ** obj)
int * arr;
int i;
*obj = malloc(sizeof(int) * 8);
arr = *obj;
for (i=0; i<8; i++)
arr[i] = i;
return 0;
【讨论】:
感谢哈卡拉如此清晰的解释。您能否解释一下下面所述的特定情况是否有效 1)我已经为变量 struct_object 分配了结构的内存,它向我显示void_object
而不是void_object[0]
?以上是关于如何在 CFFI 中找到指向结构的指针的地址并将其转换为 void**的主要内容,如果未能解决你的问题,请参考以下文章