後來,我用ctypes編寫了一個圍繞商用DAQ庫 的薄包裝器。從那以後,我遇到了Cython,並且想給它一個去,並且認爲它可能比我之前的 更好/更清晰。大部分的Cython文檔都很有意義,我發現了大部分我知道的東西,但我打包的庫高度依賴於窗口,並且與標準C/C + +代碼有點不同,至少在遠處我可以說。使用Cython編寫針對困難C頭文件的Python包裝
以下是頭文件中的一些片段,我確切地說不是 如何包裝。
#ifndef DAQ_H
#define DAQ_H
#ifdef __cplusplus
extern "C" {
#endif
#if !defined(_DAQAPI32_)
#define DAQAPI __declspec(dllimport)
#else
#define DAQAPI
#endif
從我所收集的,我大概可以忽略我用Cython 定義極本?我試着用gcc編譯C代碼,但它在每個函數定義時都會引發錯誤。用ctypes我直接訪問了庫,並沒有使用頭文件。
/* Handle Type Definition */
typedef INT DaqHandleT;
/* Initialization and Locking Prototypes */
DAQAPI DaqHandleT WINAPI daqOpen(LPSTR daqName);
DAQAPI DaqError WINAPI daqClose(DaqHandleT handle);
DAQAPI DaqError WINAPI daqOnline(DaqHandleT handle, PBOOL online);
/* Error Handler Type Definitions */
typedef VOID CALLBACK DaqErrorHandlerFT(DaqHandleT handle,
DaqError errCode);
typedef DaqErrorHandlerFT *DaqErrorHandlerFPT;
/* Error Handler Function Prototypes */
DAQAPI DaqError WINAPI daqSetDefaultErrorHandler(DaqErrorHandlerFPT
handler);
DAQAPI DaqError WINAPI daqSetErrorHandler(DaqHandleT handle,
DaqErrorHandlerFPT handler);
DAQAPI DaqError WINAPI daqProcessError(DaqHandleT handle, DaqError
errCode);
DAQAPI DaqError WINAPI daqGetLastError(DaqHandleT handle, DaqError
*errCode);
DAQAPI VOID CALLBACK daqDefaultErrorHandler(DaqHandleT handle,
DaqError errCode);
DAQAPI DaqError WINAPI daqFormatError(DaqError errorNum, PCHAR msg);
這基本上是大多數功能是如何聲明和操作。他們 只返回錯誤代碼,所有重要信息擺脫它是 通過指針完成。我找不到文檔 中有關如何使用指針返回類型的任何內容,我可能沒有看到 夠硬。
任何人都可以指向正確的方向包裝這些 函數?
像DaqError這樣的事實實際上是在頭文件中聲明的枚舉, 他們在這個庫中使用了大約1500行的enum enum瘋狂。
感謝您的幫助,