我想將Python程序中的ByteArray變量傳遞給我用C編寫的DLL,以便加速某些特定的處理,這些處理在Python中速度太慢。我已經通過網絡,嘗試了與C#參數組合,byref,cast,memoryviews,addressof,但沒有任何作用。有沒有簡單的方法來實現這一點,而不是將我的ByteArray複製到其他將會通過的東西? 這裏就是我想要做:將ByteArray從Python傳遞到C函數
/* My C DLL */
__declspec(dllexport) bool FastProc(char *P, int L)
{
/* Do some complex processing on the char buffer */
;
return true;
}
# My Python program
from ctypes import *
def main(argv):
MyData = ByteArray([1,2,3,4,5,6])
dll = CDLL('CHELPER.dll')
dll.FastProc.argtypes = (c_char_p, c_int)
dll.FastProc.restype = c_bool
Result = dll.FastProc(MyData, len(MyData))
print(Result)
但傳遞的第一個參數(邁德特)C函數時,我得到一個類型錯誤。
是否有任何解決方案不需要太多的開銷會浪費我的C函數的好處?
奧利維爾
什麼是'ByteArray'?它不應該是'bytearray'(全部小寫)嗎?你在使用Python 3嗎? –
是它的一個字節數組,對於輸入錯誤 – Marmotte06
創建一個長度相同的ctypes數組類型,並將'bytearray'傳遞給它的['from_buffer'](https://docs.python.org/3/library/ctypes。 html#ctypes._CData.from_buffer)contsructor,例如'L = len(MyData);''P =(ctypes.c_char * L).from_buffer(MyData);''dll.FastProc(P,L)'。 – eryksun