2015-06-06 2 views
1

Я новичок в Python и встраиваю его. И у меня есть одна проблема:С ++ Embedded Python и create_string_buffer

Существует функция в моем питона модуле, recieves буфер, созданный с ctypes.create_string_buffer (размер) и заполняет его содержимым с некоторого адреса памяти:

def get_mem(self, address, size, data): 
    self.mem.read_ram_block(address, size, data) 

Как я должен вызовите этот метод с использованием (char *) buffer? Я хочу заполнить свой буфер C++, полученный из python.

+0

Не могли бы вы подробнее рассказать. Мне не совсем понятно, что вы спрашиваете и чего хотите достичь. – tynn

+0

Функция «get_mem» должна получать «данные», которые должны быть созданы с помощью функции «ctypes.create_string_buffer (size)» из C++. Но я не знаю, как создать такой буфер из C++ –

ответ

0

Если вы хотите, чтобы вызвать функцию Python ctypes.create_string_buffer(size), вы могли бы легко отразить Питон кодирования на С ++ стороне:

static PyObject* create_string_buffer(unsigned long size) { 
    PyObject *ctypes = PyImport_ImportModule("ctypes"); 
    if (!ctypes) return 0; 
    PyObject *buf = PyObject_CallMethod(ctypes, "create_string_buffer", "k", size); 
    Py_DECREF(ctypes); 
    return buf; 
} 

Если вы хотите использовать другой тип, чем unsigned long для размера, вам необходимо изменить format в PyObject_CallMethod. Например, O используется для PyObject*. Полный список форматов см. В документации для Building values.

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