我需要使用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)

09-10 02:15