При доступе к API C++ из C через оболочку, как мне получить доступ к типам перечислений? ⇐ C++
-
Anonymous
При доступе к API C++ из C через оболочку, как мне получить доступ к типам перечислений?
У меня есть программа на языке C, которую мне нужно подключить к API C++. Я спросил здесь, и мне дали отличный совет, который привел к созданию «обертки».
Итак, в API есть тип под названием APIName::ReturnCode, и я хотел создать эквивалент C, поэтому сделал следующее:
В c_api.h:
#ifdef __cplusplus #define EXTERNC extern "C" #еще #define EXTERNC #endif typedef void* API_ReturnCode_t; EXTERNC API_ReturnCode_t api_returncode_init(); EXTERNC void api_returncode_destroy (API_ReturnCode_t rc); #undef EXTERNC в c_api.cpp:
#include "c_api.h" #include "/путь/к/api/api.h" API_ReturnCode_t api_returncode_init() { вернуть новое APIName::ReturnCode; } void api_returncode_destroy (API_ReturnCode_t untyped_ptr) { APIName::ReturnCode* typed_ptr = static_cast< APIName::ReturnCode*>(untyped_ptr); удалить typed_ptr; } Поэтому я компилирую это в библиотеку, включаю в свою основную программу и могу использовать такие вещи, как:
API_ReturnCode rc; чтобы определить переменную.
Однако мой следующий вопрос — как определить перечислимые типы аналогичным образом. Итак, API имеет следующее определение кодов ошибок:
пространство имен APIName { typedef enum ReturnCode_enum ReturnCode; перечисление ReturnCode_enum { RC_OK, // успех RC_ERROR, // общая ошибка RC_NOT_AVAILABLE, // функция недоступна }; } Как мне воссоздать это в своей оболочке, чтобы можно было сделать что-то подобное в своем коде?
API_ReturnCode rc = API_RC_OK;
У меня есть программа на языке C, которую мне нужно подключить к API C++. Я спросил здесь, и мне дали отличный совет, который привел к созданию «обертки».
Итак, в API есть тип под названием APIName::ReturnCode, и я хотел создать эквивалент C, поэтому сделал следующее:
В c_api.h:
#ifdef __cplusplus #define EXTERNC extern "C" #еще #define EXTERNC #endif typedef void* API_ReturnCode_t; EXTERNC API_ReturnCode_t api_returncode_init(); EXTERNC void api_returncode_destroy (API_ReturnCode_t rc); #undef EXTERNC в c_api.cpp:
#include "c_api.h" #include "/путь/к/api/api.h" API_ReturnCode_t api_returncode_init() { вернуть новое APIName::ReturnCode; } void api_returncode_destroy (API_ReturnCode_t untyped_ptr) { APIName::ReturnCode* typed_ptr = static_cast< APIName::ReturnCode*>(untyped_ptr); удалить typed_ptr; } Поэтому я компилирую это в библиотеку, включаю в свою основную программу и могу использовать такие вещи, как:
API_ReturnCode rc; чтобы определить переменную.
Однако мой следующий вопрос — как определить перечислимые типы аналогичным образом. Итак, API имеет следующее определение кодов ошибок:
пространство имен APIName { typedef enum ReturnCode_enum ReturnCode; перечисление ReturnCode_enum { RC_OK, // успех RC_ERROR, // общая ошибка RC_NOT_AVAILABLE, // функция недоступна }; } Как мне воссоздать это в своей оболочке, чтобы можно было сделать что-то подобное в своем коде?
API_ReturnCode rc = API_RC_OK;
Мобильная версия