我已经使用SWIG有一段时间了-总的来说我很喜欢它。但是使用ctypes似乎更容易实现回调函数。
我该如何将这两种与C dll交互的方式结合起来?
第一步是要知道,在通过导入相应的SWIG模块加载dll之后,如何获取ctypes对象。
谢谢,
Sebastian。
import x
from ctypes import PyDLL
dll = PyDLL(x.__file__)
缓冲区协议可能是您的最佳选择(http://docs.python.org/c-api/buffer.html)。
从C代码(例如swig生成的代码)中,您可以通过访问此接口来获取指向底层C数据的指针。
请注意,缓冲区接口有两个版本,在Python 2.x中的ctypes对象将公开旧协议,在Python 3.x中将公开新协议。
您将不得不降到Python C API级别,但只需一次,如果您将所有内容都包装好 - 例如,为支持缓冲区协议的任何内容制作一个返回void *的%inline函数,并在回调类型的typemaps中使用它。