我正在使用定义不透明类型的第 3 方 C 库:
foo_t
并在其函数中使用指向此类型的指针:
void foo_init(foo_t *foo);
典型用法是在堆栈上分配一个 foo_t 并传递一个引用:
{
foo_t foo;
foo_init(&foo);
...
}
如何在foo_init()
不知道什么构成 a 的情况下使用 ctypes调用foo_t
?
我想如果我知道sizeof(foo_t)
我可以创建一个该大小的缓冲区并进行转换,但是是否可以使用 ctypes 获得大小?
我可以编写一个单行 C 程序:
printf("sizeof(foo_t) = %zu\n", sizeof(foo_t));
并将该值硬编码到我的python中,但这会很快变得难看:每次升级库时,我都必须接触我的python源。
一种更简洁的方法是编写一个 python c-ext 来导出大小值,但这也需要在每次库升级时重新编译。
有没有人有使用这种不透明类型的 ctypes 的秘诀?