gpt4 book ai didi

python - 编写扩展时如何在 Python 和 C 之间传递空指针?

转载 作者:太空狗 更新时间:2023-10-29 15:35:56 50 4
gpt4 key购买 nike

今天我开始了我的第一个 Python 扩展,只是围绕 C 库创建了一个非常小的包装器作为练习。与 C 库的典型情况一样,您从生成处理程序的初始化函数开始。您可以将该处理程序传递给函数,然后将其传递给释放内存的清理函数。

当我开始编写包装器时,我基本上希望有一种方法可以从 python 调用每个 native C 函数。很快我遇到了一个问题,我需要将一个任意指针从 C 返回到 Python,只是为了在另一个函数中将它从那里再次提供给 C。我不在乎它看起来如何,因为我不在 Python 中使用它,我只是存储它并传递它。

那么如何在 Python 和 C 之间传递空指针呢?

请注意:我知道不建议使用扩展系统编写此类小型包装器,而是建议使用 ctypes 和 friend 。这只是为了现在的练习。

最佳答案

PyLong_FromVoidPtr() 和 PyLong_AsVoidPtr() 可被滥用以将恶意数据注入(inject)您的程序。我反对他们。

Python 拥有 PyCapsule 来完成这项工作。胶囊提供了一种在模块或 Python 空间和 C 空间之间交换 void ptr 的安全方式。胶囊也是类型安全的。如果您需要一些示例,socket/ssl 模块和 pyexpat/_elementtree 模块使用胶囊来交换 CAPI 结构。

http://docs.python.org/3/c-api/capsule.html

关于python - 编写扩展时如何在 Python 和 C 之间传递空指针?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19897338/

50 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com