使用ctypes在Python中使用Rust返回的数组

使用ctypes在Python中使用Rust返回的数组,第1张

使用ctypes在Python中使用Rust返回数组

正如其他人所说,您不能 真正 正确地返回固定大小的数组。但是您可以通过将数组包装在结构中来 欺骗 ctypes做正确的事情:

import ctypesclass Int32_4(ctypes.Structure):    _fields_ = [("array", ctypes.c_int32 * 4)]lib = ctypes.CDLL("embed.dll")lib.make_array.restype = Int32_4temp = lib.make_array()print(temp.array[:])

结果在

[1, 2, 3, 4]
我的机器上。

附录 :这是一个“技巧”,因为我们正在利用C可以做什么和Rust可以做什么之间的差异。C 不允许 您按值返回固定大小的数组,但是Rust
,并且它的工作原理与返回用户定义的结构相同。

所以,我们做的东西是c 允许:返回恰好包含一个固定大小的数组结构。这很好,并且与Rust使用的布局匹配。

当然,这也有些怪异,因为我并不 完全 相信这是明确定义的行为。如果您想更加安全,可以在Rust一侧更改返回类型以匹配C:

#[repr(C)]struct Int32_4 {    array: [i32; 4]}


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5631622.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-16
下一篇 2022-12-15

发表评论

登录后才能评论

评论列表(0条)

保存