【发布时间】:2023-03-10 13:31:01
【问题描述】:
这个问题是关于使用 SWIG 创建 Python/C++ 接口的。
我的 C++ 代码有一些模拟经典 unix 读/写的函数,我需要从 Python 调用这些函数。 C++类是这样的:
class DEVICE {
... other stuff ...
int write_bytes( const uint8_t *bytes, size_t nbytes, unsigned timeout_msecs );
int read_bytes( uint8_t *bytes, size_t nbytes, unsigned timeout_msecs );
}
这些函数完全模拟了 unix read() 和 write(),但带有超时参数,它们返回实际传输的字节数。
我正在寻找我应该提供的“正确”python API。我也是一个python Noob ..所以如果我对python做错了,请纠正我。
我想我可以弄清楚 WRITE 方面..
Python WRITE:Python 函数应该有 2 个参数:一个字节数组和一个超时值。由于 Python 数组包含它们的长度……因此长度是一个隐含的参数。
用于写入的 C++ 代码:由于内存来自 python,我只需要询问数组它包含多少字节,获取原始字节指针,然后以某种方式调用我的 C 函数。
READ 方面...我需要帮助。
Python READ:同样,2 个参数,一个字节数组和一个超时值。在这里,由于我不知道将要读取的实际字节数 - 我认为我的 C 代码应该代表 Python 分配内存(或者这是错误的吗?我不知道)。然后 - 我如何设置结果长度?我没有看到/找到一个例子。还是让我的用户/受害者预先分配数组? (这似乎是错误的)
我查看了 LLDB 代码中的示例,特别是 - 我看到了这些 %typemaps - 具体来说:
https://github.com/carlokok/lldb/blob/master/scripts/Python/python-typemaps.swig#L134
我不完全理解类型映射(我也是 swig 的新手...),但它们似乎非常接近。但不完全是我想要的。有人可以解释这些是如何工作的吗? SWIG 文档没有帮助(原因:有很多“代码片段”,我找不到完整的端到端连贯示例)
有人可以创建一个更好(连贯)的例子吗?或者给我一个例子来阅读?
【问题讨论】: