Форум сайта python.su
Мне нужно из Python вызвать функцию, реализованную в С++ библиотеке. Как понимаю, для этого мне надо создать С-интерфейс для этой библиотеки, а затер с испольованием ctypes реализовать обертку для Python.
Сама функция, к которой нужна обертка выглядит так
std::string extractFromGpkgEnvelope( const std::string &envelope )
{
int headerSize = parseHeaderSize( envelope );
std::string body( envelope.size() - headerSize, 0 );
memcpy( &body[0], &envelope[headerSize], envelope.size() - headerSize );
return body;
}
const char *MYLIB_extractFromEnvelope( const char *envelope )
{
return extractFromGpkgEnvelope( std::string(envelope) ).c_str();
}
def from_envelope(envelope): func = lib.MYLIB_extractFromEnvelope func.restype = ctypes.c_char_p body = func(ctypes.c_char_p(envelope)) return body.decode('utf-8')
Офлайн
s_olegа назовите пожалуйста хоть одну причину зачем эту функцию делать на С++?
Сама функция, к которой нужна обертка выглядит так
Офлайн
https://books.google.ru/books/about/Cython.html?id=ERFkBgAAQBAJ&redir_esc=y
опыта по применению Cython к сожелению нет
так прочитано в прок (и забыто конечно же)
Отредактировано AD0DE412 (Июнь 2, 2022 20:15:56)
Офлайн
FishHook
а назовите пожалуйста хоть одну причину зачем эту функцию делать на С++?
Офлайн
s_olegИмелось ввиду что можно было на С написать.
Например, чтобы использовать библиотеку в нескольких независимых проектах на разных языках
Офлайн
надо в закладки положить
а что нет поновее чего то
Отредактировано AD0DE412 (Июнь 2, 2022 23:49:34)
Офлайн
s_oleg
Мне нужно из Python вызвать функцию, реализованную в С++ библиотеке. Как понимаю, для этого мне надо создать С-интерфейс для этой библиотеки, а затер с испольованием ctypes реализовать обертку для Python.
s_olegСоздай консольную программу на языке C++, которая использует эту библиотеку на языке C++. На вход программе подаётся имя функции и аргументы функции через пробел. На выходе программа пишет ответ, который представляет из себя результат работы функции в виде текста в консоли (через base64 можешь передавать бинарные данные). Когда эта консольная программа будет готова, можешь написать скрипт на питоне, который использует эту консольную программу для задействования функций из библиотеки.FishHookНапример, чтобы использовать библиотеку в нескольких независимых проектах на разных языках и платформах и не плодить идентичный код. Чтобы упростить сопровождение, т.к. исправить/изменить в одном месте очевидно быстрее и проще чем в 3-4.
а назовите пожалуйста хоть одну причину зачем эту функцию делать на С++?
Офлайн