1

我对这种扩展还是新手(尽管我在 C++ 和 python 方面有很好的背景)

我想要的是使用 ctypes 模块将数据传递给迄今为止对我有用的 C++ 函数示例:

测试.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 效果很好...

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

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

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

4

1 回答 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相应的参数类型。

于 2013-02-20T20:08:35.293 回答