尝试将LabVIEW dll调用到调用CAN协议的python中

时间:2019-06-03 13:40:51

标签: python dll labview

我想知道是否有人可以帮助我理解这个错误。我正在用python调用LabVIEW生成的dll,该dll通过CAN协议与DCM通信。

在Python中调用的LabVIEW函数的结构和输入参数如下:

int32_t func_1(CStr version_number, int32_t Verbose, CStr SetupFileName);

我知道该dll已导入Python,并且正确输入了该参数,因为具有相同结构的其他函数具有相同的输入参数,并且它们不会返回错误。

import ctypes as c

mydll = c.windll.LoadLibrary('intcan.dll') #'C:/Users/PycharmProjects/impdll/intcan.dll')

mydll.func_1(c.c_char_p('15.1.1.1'), c.c_int(0), c.c_char_p('CanDevice.xml'))

运行代码时,出现以下错误。

Traceback (most recent call last):
  File "C:/Users/PycharmProjects/impdll/venv/tester.py", line 22, in <module>
    mydll.func_1(c.c_wchar_p('15.1.1.1'), c.c_int(0), c.c_wchar_p('CanDevice.xml'))
OSError: [WinError -529697949] Windows Error 0xe06d7363

Process finished with exit code 1

1 个答案:

答案 0 :(得分:0)

有多种方法可以配置字符串以将其传递到LabVIEW DLL中的函数中。

如果字符串只是输入,则最简单的方法是设置:

  • 参数类型:输入
  • 传递:C字符串指针

这将产生此函数原型:

void func_1(char MyString[])

然后您可以使用以下方式在Python中调用

import ctypes as c

mydll = c.windll.LoadLibrary('mydll.dll')
mydll.func_1("myValue".encode("ascii"))