我需要使用python校准dll函数。
该函数是:
int cbGetConfigString(int InfoType, int BoardNum, int DevNum, int ConfigItem, char *ConfigVal, int* maxConfigLen)
争论
信息类型
每个板的配置信息分为不同的
类别。此参数指定所需的类别。总是
将此参数设置为BOARDINFO。
董事会人数
安装时与板相关的编号
InstaCal或使用cbCreateDaqDevice()创建。 BoardNum可以是0到99。
开发数字
DevNum参数的用途取决于ConfigItem
通过了。它可以作为开始读取的点,索引
到ConfigItem中,或者可以忽略它。
ConfigItem
从设备读取的信息类型。将其设置为
下面的“ ConfigItem参数值”部分中列出的常量。
配置值
指向用户分配的缓冲区的指针,其中配置字符串为
复制。
maxConfigLen
指向保存要读取的最大字节数的值的指针
从设备进入ConfigVal。
请帮助我了解代码中的错误:
import ctypes
mccdaq=ctypes.WinDLL("C:\\Program Files (x86)\\Measurement Computing\\DAQ\\cbw32.dll")
Open=mccdaq.cbGetConfigString
Open.argtypes =[ctypes.c_int,ctypes.c_int,ctypes.c_int,ctypes.c_int,ctypes.POINTER(ctypes.c_char),ctypes.POINTER(ctypes.c_int)]
INTP=ctypes.POINTER(ctypes.c_int)
num=ctypes.c_int(8)
addr=ctypes.addressof(num)
ptr=ctypes.cast(addr,INTP)
mem=ctypes.c_char()
print Open(2,0,0,363,ctypes.byref(mem),ctypes.byref(num))
print mem
print num
输出:
0-没有错误
c_char('1')-应该是125E737
c_long(7)-看起来正确的字符数。
最佳答案
好的,我发现了问题:)
import ctypes
mccdaq=ctypes.WinDLL("C:\\Program Files (x86)\\Measurement Computing\\DAQ\\cbw32.dll")
Open=mccdaq.cbGetConfigString
Open.argtypes =[ctypes.c_int,ctypes.c_int,ctypes.c_int,ctypes.c_int,ctypes.POINTER(ctypes.c_char*8),ctypes.POINTER(ctypes.c_int)]
num=ctypes.c_int(8)
mem=(ctypes.c_char*8)()
print Open(2,0,0,363,ctypes.byref(mem),ctypes.byref(num))
print mem.value
print num
现在的输出是:
0
125E737
c_long(7)