ctypes python std :: string

Я работаю с ctypes, используя C ++ в качестве бэкэнд. Теперь в C ++ есть такая функция:

void HandleString(std::string something){ ... } 

Мне интересно, как вызвать эту функцию из python – нет ctype (c_char_p wont work явно), чтобы отправить строковый параметр этой функции …

Как я могу исправить это и передать строку из Python в c ++ (и изменить параметр на char *, что-то не так и опция)

PS Могу ли я создать обходной путь?

  1. отправьте строку python как c_char_p в функцию C ++, которая преобразует char * в std :: string
  2. верните строку или ее указатель как-то ??? !! (как?) на python
  3. отправьте его из python в функцию HandleString (но опять-таки я чувствую, что мне нужно будет изменить параметр на строку * здесь)

Похоже, что самый простой подход – написать тонкую оболочку c ++ вокруг библиотеки с единственной целью пересмотреть параметры из python в более сложные классы c ++.

Такой подход также поможет устранить будущие проблемы одного и того же типа, не добавляя никакой реальной сложности ни к питонному коду, ни коду C ++.

API Python C преобразует объекты Python str в char* , и есть неявное преобразование в C ++ из char* (фактически char const* ) в std::string .

Если строки Python могут содержать нулевые символы, вам нужно будет использовать PyString_AsStringAndSize для преобразования и передать два значения ( char* и Py_ssize_t ); есть явное преобразование их в std::string : std::string( pointer, length ) .