来自dll问题

时间:2016-12-08 14:20:56

标签: python c dll ctypes

我需要使用 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) - 查看正确的字符数..

1 个答案:

答案 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)