Задать вопрос

Передача char* из питона в C++

Нашёл хороший пример как с питона обратиться к с++ библиотеке, немного подкорректировал, чтобы передавать строку в функцию, однако он мне выдаёт ошибку на строке s.value = text, хотя в другом примере именно так использовали. Если просто отправляю текст, то он мне печатает только 1 символ. Помогите пожалуйста передать строку целиком
#include <iostream>
#include <string.h>

class My {
public:
	void bar(char* text) {
		std::cout << "Hello" << text << std::endl;
	}
};

extern "C" {
	My* My_new() { return new My(); }
	void My_bar(My* my, char* text){ my->bar(text); }
}


import os
from ctypes import cdll
from ctypes import c_char_p

lib = cdll.LoadLibrary("".join([(os.getcwd()), ("/libfoo.so")]))

class cpp(object):
	def __init__(self):
		self.obj = lib.My_new()

	def bar(self, text):
		s = c_char_p()
		s.value = text
		lib.My_bar(self.obj, s.value)

def main():
	cp = cpp()
	cp.bar("lol" ) 

if __name__ == '__main__':
	main()
  • Вопрос задан
  • 2706 просмотров
Подписаться 5 Оценить Комментировать
Пригласить эксперта
Ответы на вопрос 2
Может так будет лучше:

class cpp(object):
	def __init__(self):
		self.obj = lib.My_new()

	def bar(self, text):
		s = c_char_p(bytes(text))
		lib.My_bar(self.obj, s)


а вообще, чем вам Python C API не угодил? Ну или boost python?
Ответ написан
Комментировать
LittleBuster
@LittleBuster Автор вопроса
та же ошибка.

"Python C API не угодил? Ну или boost python?"

Я не знаю что это, просто тот код, что я дал мне первый попался в поиске "как подключить С++ библиотеку в питон"
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы