【发布时间】:2020-01-24 22:13:50
【问题描述】:
我正在尝试执行我的 Python 代码,该代码必须调用一个 C 函数,该函数执行一些计算并将值保存在一个必须可以从 Python 代码访问的指针中。我想这样做是因为我正在构建一个 DLL,并且我想验证 DLL 函数中的代数,因此我想使用 python 代码来验证 DLL。 Python代码
from ctypes import *
if __name__ == '__main__':
mydll = cdll.LoadLibrary("./dll_simples.dll")
funcao = mydll.simuser
funcao.argtypes = c_double,c_double,POINTER(c_double),POINTER(c_double)
a = 0
b = 0
input_1 = (c_double * 1)()
input_1[0] = 5
output_1 = (c_double * 1)()
funcao(a,b,input_1,output_1)
还有我的 DLL
__declspec(dllexport) void simuser(double t, double delt, double* in, double* out)
{
out[0] = 2 * in[0];
}
执行此代码后,我有错误
funcao(a,b,input_1,output_1)
OSError: exception: access violation reading 0x0000000000000018
【问题讨论】:
-
只是一个疯狂的猜测:你试过
funcao(a,b,byref(input_1),byref(output_1)) -
出于某种原因需要 python 吗?为什么不从 C 进行测试并省去所有 DLL 的麻烦。如果您需要异常等,请使用 C++ 或 C#。