2016-06-07 45 views
0

我已用C定義的下列枚舉++ API:的Python:檢索從C枚舉可變++使用ctypes的

typedef enum RESULT_ENUM 
{ 
    SUCCESS, 
    ERR_INVALID_PORT_DEFINITION, 
    ERR_TOO_MANY_SAMPLES, 
    ERR_RECORDING_THREAD_ALREADY_RUNNING, 
    ERR_RECORDING_WITHOUT_APPLY_SETTINGS, 
    ... 
}RESULT; 

我在C++中的程序使用該API和創建:

RESULT res; 

然後,它使用功能從API到設定值內res,例如:

res = SetProfile(APP_PROFILE); 
res = SetDynamicImageFilter(filterType); 
res = StartCalibration(); 

我要到c reate一個Python程序,它使用ctypes完成相同的操作(字面意思)。 如何用Python語言翻譯RESULT res;?我如何使它包含函數所需的結果 ?

編輯:

這些函數返回匹配RESULT枚舉,價值觀。我想用Python獲取這些枚舉器,我該怎麼做?我目前正在獲取對應於枚舉值的數字。

+0

在Python中重新創建'enum'有點笨拙,因爲它不適合語言的設計。有關示例,請參閱[本文](http://stackoverflow.com/questions/1546355/using-enums-in-ctypes-structure)。 – Tim

+0

在C++中,res由API在內部進行更改,並且可由C++程序訪問。有沒有一種方法可以模仿Python中的這種行爲?像創建一個會根據C++ API改變的'ctypes'變量? – galah92

回答

0

值映射的名稱未編譯到二進制文件中。

所有的ctypes代碼需要一個枚舉硬編碼值的python值。

如果您將C++代碼封裝在python擴展中,您可以選擇將枚舉值作爲模塊的python符號公開。

如果你控制C++實現,你可以添加一個輔助函數來返回你需要的枚舉值。

+0

我不控制C++ API。所以我想我正在尋找的是將枚舉值暴露爲python符號。我怎樣才能做到這一點? – galah92