У меня есть функция C++, которая принимает указатель на массив известного размера как входной и возвращает массив размера, который не может быть определен до тех пор, пока функция не завершит обработку данных. Как я могу вызвать функцию C++, передав первый массив и получив результаты как второй массив?ctypes Функция C++ возвращает массив неизвестного размера
я в настоящее время сделать что-то похожее на это:
ПИТОН:
def callout(largeListUlonglongs):
cFunc = PyDLL("./cFunction.dll").processNumbers
arrayOfNums = c_ulonglong * len(largeListUlonglongs)
numsArray = arrayOfNums()
for x in xrange(len(largeListUlonglongs)):
numsArray[x] = long(largeListUlonglongs[x])
cFunc.restype = POINTER(c_ulonglong * len(largeListUlonglongs))
returnArray = cFunc(byref(numsArray)).contents
return returnArray
Это работает так долго, как returnArray того же размера, что и numsArray. Если он меньше, то пустые элементы массива заполняются 0. Если возвращаемый массив больше, чем результаты будут обрезаны после заполнения элементов массива.
Если это помогает, структура возвращаемого массива содержит размер возвращаемого массива в качестве его первого элемента.
Спасибо за помощь заранее ...
* «Если он меньше, то пустые элементы массива заполняются 0». * Это чистое совпадение, основанное на том, выделена ли эта память и нуль. Это может быть так же легко segfault. ctypes не копирует возвращаемый массив в новый буфер. – eryksun