我需要使用 python 来调用dll函数。
功能是:
int cbGetConfigString(int InfoType, int BoardNum, int DevNum, int ConfigItem, char *ConfigVal, int* maxConfigLen)
信息类型
每个板的配置信息分组为不同 类别。此参数指定所需的类别。总是 将此参数设置为BOARDINFO。
BoardNum
安装时与电路板关联的编号 InstaCal或使用cbCreateDaqDevice()创建。 BoardNum可能是0到99。
设备号
DevNum参数的目的取决于ConfigItem的存在 通过。它可以作为开始读取的一个点,一个索引 进入ConfigItem,或者可以忽略它。
ConfigItem
要从设备读取的信息类型。将其设置为其中一个 " ConfigItem参数值中列出的常量"以下部分。
ConfigVal
指向配置字符串所在的用户分配缓冲区的指针 复制。
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) - 查看正确的字符数..
答案 0 :(得分:1)
好的,我发现了问题:)
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)