【发布时间】:2012-12-22 22:10:03
【问题描述】:
我正在尝试使用 Cython 在我的 Python 代码中访问 C++ 全局变量。
假设我的 C++ 代码中有以下数组:
// Project.cpp
int myArr[2] = { 0, 1 };
所以,在 Cython 中定义一个指向 myArr 的指针:
cdef extern int * myArr_ptr
myArr_ptr 真的指向 C++ 数组吗?还是只是一个随机值?
【问题讨论】:
-
在 C++ 或 Cython 中,您尚未将
myArr的地址分配给myArr_ptr。事实上,你所做的一切都被定义为外部变量,所以我认为这甚至不会链接。但如果确实如此,是的,您将获得一个随机值——或者,由于它是一个随机指针值,因此将其称为等待中的段错误可能会更好。你是从某个地方复制的吗?如果有,在哪里? (知道这会让你更容易猜出你到底想做什么。) -
嗯..我明白了!不,我没有从任何地方复制它......我试图做的是在 Python 中访问
myArr的元素。有什么办法可以存档吗? -
当然,访问其他内容的方式相同。是什么让您认为在末尾添加
_ptr是必要的或有帮助的? -
是的,但我没有 Python 上的数组。所以我不知道如何获得这些值。
_ptr只是告诉它应该指向 C++ 中的myArr。 -
Cython 不会根据这样的名称做任何魔法。您可以通过将数组公开给 Python 来将其公开给 Python,或者您可以创建一个指向其第一个元素的指针,然后将其公开给 Python,或者您甚至可以直接将数组作为指针公开给 Python。只要you do it explicitly,您甚至可以进行神奇的重命名。我真的不明白你想在这里做什么。您是否阅读了教程和“外部声明”部分?
标签: c++ python arrays python-3.x cython