4

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

现在在我的 python 代码中,我希望从链接到我的 C 程序的其他 C 库中回调函数。我可以编写一个 Python 扩展(请参阅本文档中的扩展嵌入式 Python )。但是,ctypes会让这变得更容易,并且允许我使用一些现有的代码。

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

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

4

2 回答 2

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 代码中调用这个(或类似的)代码。

于 2012-06-13T13:33:08.813 回答
0

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

于 2012-06-13T13:40:18.850 回答