2013-02-20 55 views
1

我還是新來這種擴展的(雖然我已經在C良好的背景++和Python)路過蟒蛇數組到C++使用功能的ctypes

我想要的東西是使用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效果很好...

注: 我使用這個開發附加組件(插件)對於攪拌機,我將傳遞給C數據++函數是一個巨大的數組(數組或任何類型的陣列),該數據將被傳遞到GPU與OpenCL的

主要在C++中的工作流被傳遞指針(將整個陣列數據複製到GPU)

所以問題來處理它是: 獲得C++內部的元組指針的最好方法(希望解釋python和C++中會發生什麼)

回答

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) 

這裏假設函數只是簡單地帶一個指針。如果你的函數只需要5個浮點數,你可以提供c_float * 5作爲相應的參數類型。

+0

謝謝,請檢查一下:) – 2013-02-21 04:25:52