0
我想要做的是將C函數轉換爲python函數。如何在調用函數時返回ctyps中的數組
例如,我有一個C函數原型其中預先定義:
function_test(ViInt32 Arraysize, ViReal64 readingArray[], ViInt32 *Actual_rraysize)
上述功能的輸入是Arraysize
,這是在readingArray
參數元素的數量。
上述功能的輸出爲readingArray[]
和Arraysize
。 readingArray[]
返回結果數組,Actual_arraysize
指示返回數組的實際大小。
而下面是Python的功能我寫了使用此C函數原型:
from ctypes import *
def Py_function_test(self, arraysize, readingarray = [], actualarraysize = [-1e-10]):
while len(readingarray) < arraysize:
readingarray.append(0)
_c_actualarraysize = c_int()
ArrayOfDouble = c_double * arraysize
_c_readingarray = ArrayOfDouble()
self.function_test(c_int(arraysize),
byref(_c_readingarray),
byref(_actualarraysize))
for n in range(arraysize):
readingarray[n] = _c_readingarray[n]
actualarraysize[0] = _c_actualarraysize.value
最終,原來的acutalarraysize
值更改成功。但撥打c function prototype
後readingarray
的值沒有變化。
如何處理這種情況,是因爲我不應該使用byref
?
我不知道是什麼問題,但是在我嘗試了你的方法之後,'_c_readingarray'的值仍然不會改變。 – 2342G456DI8 2012-07-18 07:52:55
你確定c函數改變了readingArray的內容嗎?我添加了測試c代碼。請將c代碼編譯到test.dll中,並嘗試使用我的python代碼。 – HYRY 2012-07-18 08:24:32
非常感謝,終於找出問題所在。這是'dll'的問題,而不是python的實現,但是你教給我的東西對我來說非常有用。 – 2342G456DI8 2012-07-18 09:45:50