しばらく前に、ctypes を使用して商用 DAQ ライブラリのシン ラッパーを作成しました。それ以来、私は Cython に出くわし、それを試してみたいと思っていました。Cython のドキュメントのほとんどは理にかなっていて、私が知っていることのほとんどを見つけましたが、ラップしているライブラリは非常に Windows 固有であり、少なくとも私ができる限り、標準の C/C++ コードとは少し異なることを行います。教えて。
これは、ヘッダー ファイルからのいくつかのスニペットです。ラップする方法が正確にはわかりません。
#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 のようなものは、実際にはヘッダー ファイルで宣言された enum です。このライブラリでは、約 1500 行の enum に夢中になります。
助けてくれてありがとう、