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 的子解释器

C++ 嵌入式 Python 和 create_string_buffer

从 C++ 停止嵌入式 Python 提示符

[ZT]C++ 扩展和嵌入 Python

在 C++ 套接字编程中嵌入 Python

c++中嵌入python