使用ctypes将Python数组传递给C++函数
我对这种扩展方式还很陌生(虽然我在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++中发生了什么)
1 个回答
3
最简单的方法就是告诉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)
这假设这个函数只需要一个指针。如果你的函数需要正好五个浮点数,你可以提供c_float * 5
作为对应的参数类型。