使用Cython为困难的C头文件编写Python包装器

使用Cython为困难的C头文件编写Python包装器,python,cython,Python,Cython,不久前,我在一个商业DAQ库周围写了一个薄薄的包装 使用ctypes。从那以后,我遇到了Cython,想给她一些帮助 这是一个尝试,认为这可能会使它比什么更好/更干净 我以前有过。大部分Cython文档都是有意义的,我已经 找到了我知道的大部分,但我正在包装的库非常有用 特定于windows,并且与标准C/C有些不同+ +代码,至少据我所知 下面是头文件中的几个片段,我不太清楚 当然知道如何包装 从我收集到的信息来看,我可能可以忽略我的cython中的大部分内容 定义?我尝试过用gcc编译C

不久前,我在一个商业DAQ库周围写了一个薄薄的包装 使用ctypes。从那以后,我遇到了Cython,想给她一些帮助 这是一个尝试,认为这可能会使它比什么更好/更干净 我以前有过。大部分Cython文档都是有意义的,我已经 找到了我知道的大部分,但我正在包装的库非常有用 特定于windows,并且与标准C/C有些不同+ +代码,至少据我所知

下面是头文件中的几个片段,我不太清楚 当然知道如何包装



从我收集到的信息来看,我可能可以忽略我的cython中的大部分内容 定义?我尝试过用gcc编译C代码,但它会在每个函数定义中抛出错误。使用ctypes,我直接访问库,根本不使用头文件



这基本上就是大多数函数的声明和操作方式。他们 只返回错误代码,所有要从中获取的重要信息都是 通过指针完成。我在文档中找不到任何东西 关于如何使用返回类型的指针,我可能没有注意到 够难了

有人能告诉我包装这些东西的正确方向吗 功能

像DaqError这样的东西实际上是头文件中声明的枚举, 他们在这个图书馆里有点疯狂,大约1500行


感谢您的帮助,

使用返回类型创建cython typedef。这样,cython将使用与原始库相同的宏

cdef extern from "header.h":

    ctypedef void * win_api_t "DAQAPI DaqHandleT WINAPI"
    win_api_t daqOpen( char* )  

cpdef pyDaqOpen( pystr ):
    daqOpen(pystr)

使用返回类型创建cython typedef。这样,cython将使用与原始库相同的宏

cdef extern from "header.h":

    ctypedef void * win_api_t "DAQAPI DaqHandleT WINAPI"
    win_api_t daqOpen( char* )  

cpdef pyDaqOpen( pystr ):
    daqOpen(pystr)
cdef extern from "header.h":

    ctypedef void * win_api_t "DAQAPI DaqHandleT WINAPI"
    win_api_t daqOpen( char* )  

cpdef pyDaqOpen( pystr ):
    daqOpen(pystr)