簡體   English   中英

使用ctypes將python數組傳遞給c ++函數

[英]passing python array to c++ function using 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開發一個Addon(插件),我將傳遞給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)

這假設該函數只需一個指針。 如果你的函數只有五個浮點數,你可以提供c_float * 5作為參數類型。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM