在Python中从.so文件中检索结构

时间:2016-03-28 22:02:40

标签: python struct ctypes

我正在尝试为现有的C源代码项目编写.so库包装器,然后从Python调用.so库中的函数。我已经能够使用原始参数调用函数并返回没有问题的类型,所以我现在正在处理与更复杂的函数的接口,这些函数具有指向结构的指针。

我的问题是在Python端创建结构,以便我可以调用C库函数。 .so库中的一些结构有数百个字段,所以我希望有更简单的替代方法来拼写Python ctypes Structure对象中的所有字段和类型。

我希望能够写出像这样的东西:

from ctypes import *

lib = cdll.LoadLibrary("./libexample.so")

class Input(Structure):
    _fields_ = lib.example_struct._fields  ## where `example_struct` is defined in the .so library
                     ## I have no idea if you can actually get the fields of the struct!!

my_input = Input(a,b,c,...)  ## pseudo-code
my_ptr = pointer(my_input)  ## wrap the input with a pointer
result = lib.my_lib_func(my_ptr)  ## call .so function with struct

这将允许我轻松复制至少大型C结构的结构定义,而无需创建和维护结构定义的冗长Python版本。这可能吗?还是有另一种方法可以达到同样的效果吗?

编辑:C源代码是第三方,所以现在,我正在寻找一种方法,我不需要修改C源。

1 个答案:

答案 0 :(得分:0)

Cython方法是读取和解释.h头文件。 但我并不认为这很容易。