c++ - 使用ctypes将python数组传递给c++函数

标签 c++ python ctypes

我对这种扩展还是陌生的(尽管我有很好的 C++ 和 Python 背景)

我想要的是使用 ctypes 模块将数据传递给 C++ 函数 到目前为止对我有用的例子:

test.dll文件

#define DLLEXPORT extern "C" __declspec(dllexport)

DLLEXPORT int sum(int a, int b) {
    return a + b;
}

sum_test.py 文件:

from ctypes import cdll
mydll = cdll.LoadLibrary('test.dll')
mydll.sum(5, 3)

结果是 8,效果很好...

注意: 我正在使用它为 blender 开发一个插件(插件),我将传递给 C++ 函数的数据是一个巨大的数组(元组或任何类型的数组),这些数据将被传递给 GPU 以使用 OpenCL 进行处理

主要是C++中的工作流程是传递一个指针(这会将整个数组数据复制到GPU)

所以问题是: 在 C++ 中获取元组指针的最佳方法(也是最快的)(希望能解释 python 和 C++ 中发生的情况)

最佳答案

最简单的方法是告诉 ctypes 该函数采用指向特定类型数组的指针,在许多情况下,Python/ctypes 会找出其余部分。

libc = CDLL('libc.so.6') # on Debian/Linux
printf = libc.printf
printf.restype = c_int
printf.argtypes = [POINTER(c_char), c_int]
printf('< %08x >', 1234)

这假设该函数将只接受一个指针。例如,如果您的函数恰好采用五个 float ,您可以根据参数类型提供 c_float * 5

关于c++ - 使用ctypes将python数组传递给c++函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14976743/

相关文章:

python - 如何处理 GSL 集成中的错误

C++ : Calling a child method from parent instantiation

从uchar到int的C++数据打包(包括正数和负数)

c++ - 有没有更简洁的方法将 std::string 合并到 std::vector<char> 中?

Python - 如何使填字游戏求解器更快

python - 静态库的ctypes?

C++ 设置 TDateTime 变量

python - 如何在 Python 中以智能且优雅的方式将 *args 和 **kwargs 与 __init__ 一起使用?

python - 将数据库迁移从 sqlalchemy-migrate 更改为 Flask-Migrate

python - 如何使用 ctypes 加载链接到非默认 libc 的库?