我试图执行我的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
清单[Python 3.Docs]: ctypes - A foreign function library for Python
因此,您希望将数组传递给需要指针的函数。在这种情况下,需要ctypes.cast:
因此,不是:
使用:
查看现有的C代码,它只为2个指针使用一个值,在这种情况下,您根本不需要数组(但我怀疑这是目的,因为这样输入值就不应该是指针):
一个工作示例:[SO]: Pointer from Python (ctypes) to C to save function output (@CristiFati's answer)
相关问题 更多 >
编程相关推荐