我在C库中的结构是这样的.
DataFn中的函数指针指向静态函数.
.H
struct Data {
int i;
int *array;
};
typedef struct {
bool (* const fn1) (struct Data*, const char *source);
....
} DataFn;
extern DataFn const DATAFUNC
使用objdump,该表仅包含DATAFUNC和gcc中的一些其他内容.
这在C中很好,其中调用fn1就像DATAFUNC.fn1(…,…),但是这样的东西怎么会被包裹起来所以fn1可以用python w / ctypes调用?
示例python
libc = ctypes.cdll.LoadLibrary("./data.so")
print(libc.DATAFUNC)
结果是
< _FuncPtr对象位于0x6ffffcd7430>
解决方法:
我相信缺少的主要部分是ctypes类型的in_dll方法(访问从dll部分导出的值).
除此之外,为了使用C数据,您需要让Python知道数据格式.这适用于:
>结构.通过继承ctypes.Structure来定义Python对应物
>函数指针(适用于您的情况).使用ctypes.CFUNCTYPE定义它们
我准备了一个简化的例子,说明了上述内容.请注意,我没有做任何错误处理(检查NULL(你应该)),以保持简单.
c.h:
struct Data {
int i;<