有一个dll函数:int Enum_DeviceNameList(int iOperationType,char *cDevNameBuf,int iBufLen,int *iNumber,char *cFilterInfor)
参数说明如下:
iOperationType 枚举类型 输入 0 --- 1, 0:枚举类模式USB设备名称;1:枚举驱动名称。
cDevNameBuf 名称列表缓冲区 输出
iBufLen 缓冲区大小 输入 >0 必须与名称列表缓冲区大小一致
iNumber 名称列表数量 输出
cFilterInfor 名称枚举过滤信息 输入,可以设置为Null或“”(空)
导入dll后,Enum_DeviceNameList的参数设置哪里的问题呢?
# coding: utf-8
from ctypes import *
import sys
import os
path = os.path.split(sys.argv[0])[0]
dll_name = os.path.join(path, "lib", "BPLADLL.dll")
dll = CDLL(dll_name) # CDLL unless function declared __stdcall
funct = dll.Enum_DeviceNameList
funct.argtypes = (c_int, c_char_p, c_int, POINTER(c_int), c_char_p) # c_char_p for char*
funct.restype = c_int # return value is int
p = c_int()
type = c_int(0)
buf = create_string_buffer(b"", 1024)
buflen = c_int(len(buf))
retval = funct(type, buf, buflen, byref(p), None)
print(retval)
尝试过多次,一直出现下面的错误:
OSError: exception: access violation writing 0x0000000000000000
请高人指教
dll链接:
你好,我是有问必答小助手,非常抱歉,本次您提出的有问必答问题,技术专家团超时未为您做出解答
本次提问扣除的有问必答次数,将会以问答VIP体验卡(1次有问必答机会、商城购买实体图书享受95折优惠)的形式为您补发到账户。
因为有问必答VIP体验卡有效期仅有1天,您在需要使用的时候【私信】联系我,我会为您补发。