Как найти адрес указателя на структуру и привести его к void ** в CFFI

Мой код на C ++

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 ‘void *’ NULL>

<cdata ‘void *’ 0xc173c0>

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;
}
2

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]