从Python调用C DLL函数时出错

布德隆

我正在尝试执行必须调用C函数的Python代码,该函数执行一些计算并将值保存在必须可从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-Python的外部函数库

因此,您想将数组传递给需要指针的函数。在这种情况下,需要ctypes.cast

因此,代替:

funcao(a, b, input_1, output_1)

采用:

funcao(a, b, cast(input_1, POINTER(c_double)), cast(output_1, POINTER(c_double)))

查看现有的C代码,它仅对2个指针使用一个值,在这种情况下您根本不需要数组(但是我怀疑这是故意的,因为输入值不应该是指针):

# ...

input_1 = c_double(5)
output_1 = c_double(0)

funcao(a, b, byref(input_1), byref(output_1))

一个有效的示例:[SO]:从Python(ctypes)到C的指针,以保存函数输出(@CristiFati的回答)

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章