gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 02:57:00 26 4
gpt4 key购买 nike

我对这种扩展还是陌生的(尽管我有很好的 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/

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