我可以使用ctypes从C中嵌入的python中回调C函数吗?

时间:2012-06-13 13:21:38

标签: python python-2.7 ctypes python-extensions

我有一个嵌入了python代码的C程序。我从源代码编译了python 2.7.2,并将我的程序与libpython2.7.a链接起来。

现在在我的python代码中,我想回调链接到我的C程序的其他C库中的函数。我可以编写一个python扩展(请参阅this document中的扩展嵌入式Python)。但是, ctypes 会使这更容易,并且允许我使用一些未加密的现有代码。

ctypes 面向加载共享库,我想知道是否有办法将其“指向”我的静态程序代码。

我无法将相关代码编译到共享库中,因为我的目标是iOS,Apple禁止使用AFAIK共享库。

2 个答案:

答案 0 :(得分:2)

从Python代码中,您可以为静态函数创建ctypes包装器,如下所示:

restype = ctypes.c_int
argtypes = [ctypes.c_int, ctypes.c_double]        # or whatever
functype = ctypes.CFUNCTYPE(restype, *argtypes)
wrapper = functype(address_of_static_function_as_an_int)

您当然可以从C代码中调用此代码(或类似代码)。

答案 1 :(得分:0)

构造一个封装函数指针的ctypes值(例如ctypes.c_void_p)并将其传递给Python代码。