C++ 嵌入式 Python 和 create_string_buffer
Posted
技术标签:
【中文标题】C++ 嵌入式 Python 和 create_string_buffer【英文标题】:C++ Embedded Python and create_string_buffer 【发布时间】:2015-06-06 12:10:38 【问题描述】:我是 Python 的新手,并且也嵌入了它。我有一个问题:
我的 python 模块中有一个函数可以接收使用 ctypes.create_string_buffer(size) 创建的缓冲区,并用某个内存地址中的内容填充它:
def get_mem(self, address, size, data):
self.mem.read_ram_block(address, size, data)
我应该如何使用 (char *) 缓冲区调用此方法?我想用从 python 接收的填充我的 C++ 缓冲区。
【问题讨论】:
您能否详细说明一下。我不太清楚你在问什么以及你想要实现什么。 函数“get_mem”应该接收“数据”,它应该使用 C++ 中的“ctypes.create_string_buffer(size)”函数创建。但我不知道,如何从 C++ 创建这样的缓冲区 【参考方案1】:如果你只想调用 Python 函数ctypes.create_string_buffer(size)
,你可以很容易地在 C++ 端镜像 Python 编码:
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
之外的其他类型作为大小,您还需要更改PyObject_CallMethod 中的format
。例如O
用于PyObject*
。有关格式的完整列表,请参阅Building values 的文档。
【讨论】:
以上是关于C++ 嵌入式 Python 和 create_string_buffer的主要内容,如果未能解决你的问题,请参考以下文章
Matplotlib 和 C++ 中嵌入式 python 的子解释器