我已经使用SWIG很长一段时间了--通常我喜欢它。但是使用ctype做回调函数似乎(要容易得多)。
我如何结合这两种与C dll交互的“方式”?
第一步是知道,在dll已经通过导入相应的SWIG模块加载之后,如何将ctype对象获取到dll。
谢谢,
塞巴斯蒂安。
发布于 2011-10-25 18:33:24
缓冲协议可能是您最好的选择( http://docs.python.org/c-api/buffer.html )。
从C代码(例如swig生成的代码)中,您可以通过访问此接口来获取指向底层C数据的指针。
注意,buffer接口有两个版本,Python2.x中的ctypes对象将暴露旧协议,而python3.x中的ctype对象将暴露新协议。
你将不得不下到Python C API级别,但如果你把所有东西都包装得很好的话,只需要一次-例如,可以为支持buffer协议的任何东西创建一个返回void*的%inline函数,并在你的回调类型的类型映射中使用它。
发布于 2011-10-25 18:55:19
如果x.pyd是swig编译的扩展模块,那么你可以这样通过ctype加载dll:
import x
from ctypes import PyDLL
dll = PyDLL(x.__file__)根据导出函数使用的调用约定,您可能需要使用PyDLL、WinDLL或CDLL。
https://stackoverflow.com/questions/7886790
复制相似问题