我正在使用python脚本来为Strand / Straus7导入他的DLL。
我正在尝试按照手册(Img.1)调用一个函数来设置单位,称为St7SetUnits,并观察我导入的DLL的 .py 脚本({ {3}})。该函数需要 c_long 和 ctypes.POINTER。(c_long),如脚本中指定的那样(Img.2)
这里有完整的手册strand7.com/downloads/Strand7%20R246%20API%20Manual%20TOC.pdf
这里是 .py 脚本Img.3
如手册开头所述,我必须转换ctypes数组中的列表(https://www.dropbox.com/s/88plz2funjqy1vb/St7API.py?dl=0)。 我调用的函数与示例相同,但我无法正确调用它。 我写了
import St7API as SA
import ctypes
SA.St7Init()
unitsArray = ctypes.c_int * SA.kLastUnit
units = unitsArray()
units[0] = 0
units[1] = 1
units[2] = 3
units[3] = 1
units[4] = 1
units[5] = 2
SA.St7SetUnits(1, units)
但是返回错误
expected c_long, got c_long_Array_6
如果我尝试其他的东西,例如数组中的int
SA.St7SetUnits(1, units[0])
中的错误更改
expected LP_c_long, got int
我尝试了很多解决方案,但没有人工作。
任何人都可以帮助我吗?
非常感谢
答案 0 :(得分:0)
我知道已经有一段时间了,但这对我有用:
units_type=ctypes.c_long*6
Units = units_type(0,1,3,1,1,2)
St7API.St7SetUnits(1,Units)
答案 1 :(得分:0)
从您的屏幕截图看来,您可能正在使用Grasshopper。如果是这样,您可能需要通过将以下行添加到脚本顶部来显式将unites数组强制转换为指针:
PI = ctypes.POINTER(ctypes.c_long)
每当您将数组从IronPython传递到St7API时,请执行以下操作:
SA.St7SetUnits(1, PI(units))
This answer的数量更多。