Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/python-2.7/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python-cdll在从Python2.7升级到3.8后立即使程序崩溃_Python_Python 2.7_Matlab_Dll_Python 3.8 - Fatal编程技术网

Python-cdll在从Python2.7升级到3.8后立即使程序崩溃

Python-cdll在从Python2.7升级到3.8后立即使程序崩溃,python,python-2.7,matlab,dll,python-3.8,Python,Python 2.7,Matlab,Dll,Python 3.8,我正在将一个项目从Python2.7升级到3.8,这涉及从dll调用函数。这个dll实际上是用MATLAB的codegen实用程序生成的 codegen实用程序的.h文件中显示的函数标题(编辑以隐藏任何细节)说明: 现在,使用Python 2.7,我可以通过以下步骤调用此函数: 从ctypes导入* myDll=cdll.LoadLibrary(指向我的库的路径) #初始化值如下所示: 输入数组=(c_double*12)() returnArray=(c_double*12)() 值1=c_双

我正在将一个项目从Python2.7升级到3.8,这涉及从dll调用函数。这个dll实际上是用MATLAB的codegen实用程序生成的

codegen实用程序的.h文件中显示的函数标题(编辑以隐藏任何细节)说明:

现在,使用Python 2.7,我可以通过以下步骤调用此函数:

从ctypes导入*
myDll=cdll.LoadLibrary(指向我的库的路径)
#初始化值如下所示:
输入数组=(c_double*12)()
returnArray=(c_double*12)()
值1=c_双倍(值)等。
# ...
# ...
#在代码的后面,在确保所有输入都转换为正确的CTYPE之后
结果=[]
myDll.example_func(inputArray、inputStruct、value1、value2、value3、returnArray)
对于范围(0,12)内的i:
result.append(returnArray[i])
这会将我期望的结果返回到“result”

现在,当我尝试用python 3.8做同样的事情时,我会调用
myDll.example_func(…)
,它会立即终止程序,并得到错误代码:
流程结束,退出代码为-1073741819(0xC0000005)

DLL是64位的,我使用的是Python3.8的64位版本


我不知道从这里到哪里去,任何方向或帮助都将不胜感激

什么是
struct0\u T
?如何初始化结构?执行myDll时如何将指针传递到结构。例如_func?@Rotem它是一个简单的结构,填充了各种双精度。我在python中创建了一个ctypes结构,
inputStruct
,并将其传递到如上所示的函数中,该函数似乎与python 2.7一起工作。我曾经尝试过传入
ctypes.pointer(inputStruct)
,但运气不好。什么是
struct0\u T
?如何初始化结构?执行myDll时如何将指针传递到结构。例如_func?@Rotem它是一个简单的结构,填充了各种双精度。我在python中创建了一个ctypes结构,
inputStruct
,并将其传递到如上所示的函数中,该函数似乎与python 2.7一起工作。我确实尝试过传入
ctypes.pointer(inputStruct)
,但运气不好。
extern void example_func(const double inputArray[12], const struct0_T *inputStruct, double
    value1, double value2, double value3, double returnArray[12]);