请教ctypes调用dll函数参数

有一个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天,您在需要使用的时候【私信】联系我,我会为您补发。