为什么Python的ctypes.CDLL不能从C头文件自动生成restype和argtypes?

17 投票
1 回答
2872 浏览
提问于 2025-04-16 12:01

比如说,能够这样做就太好了:

from ctypes import CDLL
mylib = CDLL('/my/path/mylib.so',header='/some/path/mylib.h')

而不是这样:

from ctypes import *
mylib = CDLL('/my/path/mylib.so')
mylib.f.restype = c_double
mylib.f.argtypes = [c_double, c_double]
mylib.g.restype = c_int
mylib.g.argtypes = [c_double, c_int]

我用Python的经验告诉我,要么是已经有非常接近这个的东西了,只是我没找到,要么是有很好的理由不这样做。有没有这两种情况呢?

1 个回答

12

我也问过自己同样的问题,在我深入研究之前,我发现了ctypesgen这个工具:

http://code.google.com/p/ctypesgen/

这个工具可以帮你处理所有这些事情,虽然你需要先花点时间学习一下。我们用ctypesgen来生成Subversion绑定的Python接口,它效果非常好。

撰写回答