Я нахожусь в процессе обновления проекта с python 2.7 до 3.8, который включал вызов функции из dll. Эта dll была фактически сгенерирована с помощью утилиты codegen MATLAB.
Заголовок функции, показанный в файле .h из утилиты codegen (отредактирован, чтобы скрыть какие-либо детали), заявляет:
extern void example_func(const double inputArray[12], const struct0_T *inputStruct, double
value1, double value2, double value3, double returnArray[12]);
Now , с Python 2.7 Я смог вызвать эту функцию с помощью следующих шагов:
from ctypes import *
myDll = cdll.LoadLibrary(path_to_my_library)
# initialized values like so:
inputArray = (c_double*12)()
returnArray = (c_double*12)()
value1 = c_double(value) # etc.
# ...
# ...
# later in the code, after making sure all inputs were cast to the correct ctypes
result = []
myDll.example_func(inputArray, inputStruct, value1, value2, value3, returnArray)
for i in range(0, 12):
result.append(returnArray[i])
Это вернуло бы ожидаемый результат в «результат»
Теперь, когда я пытаюсь и сделать то же самое с python 3.8, я попадаю в точку, где я вызываю myDll.example_func(...)
, и программа немедленно завершает работу, и я получаю код ошибки: Process finished with exit code -1073741819 (0xC0000005)
DLL - 64 -bit, и я использую 64-битную версию Python 3.8.
Я не уверен, куда отсюда go, будет приветствоваться любое направление или помощь.