2016-06-07 2 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(); 

Я хочу с повторите программу Python, которая делает то же самое (буквально), используя ctypes. Как перевести RESULT res; на питоновский путь? Как я могу сделать это с желаемыми результатами от функций?

EDIT:

Эти функции возвращают значения, которые соответствуют RESULT счетчиками. Я хочу получить эти перечисления в Python, как я могу это сделать? В настоящее время я получаю числа, соответствующие значениям счетчиков.

+0

Воспроизведение 'enum' в Python немного неуклюже, так как оно не очень хорошо вписывается в дизайн языка. См. [Этот пост] (http://stackoverflow.com/questions/1546355/using-enums-in-ctypes-structure) для примеров. – Tim

+0

В C++ 'res' меняет внутренне API и доступен программой C++. Есть ли способ имитировать это поведение в Python? Как создать переменную 'ctypes', которая изменится в соответствии с C++ API? – galah92

ответ

0

Отображение имени для значения не скомпилировано в двоичный файл.

Все коды ctypes, которым требуется значение перечислимых жестких кодов, значение в python.

Если вы завершаете код C++ в расширении python, вы можете выбрать отображение значений перечисления в виде символов python вашего модуля.

Если вы управляете реализацией C++, которую вы вызываете, вы можете добавить вспомогательную функцию, чтобы вернуть значение нужного вам перечисления.

+0

Я не контролирую API C++. Поэтому я предполагаю, что то, что я ищу, отображает значения enum как символы python. Как я могу это сделать? – galah92

Смежные вопросы