【问题标题】:C++ Embedded Python and create_string_bufferC++ 嵌入式 Python 和 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++ 创建这样的缓冲区

标签: python c++ arrays buffer


【解决方案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 的文档。

【讨论】:

    猜你喜欢
    • 2022-01-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-04-27
    • 1970-01-01
    • 2013-01-28
    • 1970-01-01
    • 2014-04-03
    相关资源
    最近更新 更多