2016-07-22 37 views
0

我的C++代码是如何找到一个指针的地址结构和它转换为void **在CFFI

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

,我的作用是

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

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

  1. 我怎样才能在CFFI中实现相同?

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

我知道铸造void**可以通过

ffi.cast("void*",address) 

做,但我怎么能得到这个地址,并且传递给函数?

回答

1

有可能声明arg = ffi.new("void **")可能可用。

以下代码打印

< CDATA '无效*' NULL >

< CDATA '无效*' 0xc173c0 >

即,第一所述的值指针为零,并且在调用之后,该值对应于值e设定在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; 
} 
+0

谢谢Hakala这样一个明确的解释。 能否请您解释一下我下面说的特殊情况下是否工作 1)我已分配了一个结构的内存变量 struct_object 它显示我 2)创建一个空白**变量 void_object = cfg_cffi.ffi.new(“void **”) 3)将struct变量的内存分配给void ** void_object [0] = struct_object 4)现在通过函数void_object [0]在问题 中说明该程序工作没有错误,但返回-1这是特定的失败条件根据实施entation。 – Ash

+0

您是否尝试过传递'void_object'而不是'void_object [0]'? –

+0

@哈卡拉...它的工作原理。非常感谢... – Ash

相关问题