我一直试图使用制造商(ZKTECO)提供的SDK为设备设置一些数据。一些函数,如连接、断开连接、修改IP地址,工作时没有任何问题,但当我试图将数据更新到内部表时,会得到以下错误:exception: access violation writing 0x000000000205A040。从我所做的研究来看,最常见的问题是设置合适的讨论类型和restypes,这一点我已经应用到了我的理解中。作为额外的信息,im使用python3.7和Windows 10支持64位.
文件中的职能:
int SetDeviceData(HANDLE handle,const char *TableName, const char *Data, const char *Options)
int Connect(const char *Parameters)
Void Disconnect(HANDLE handle)我到目前为止的代码是:
import ctypes
from ctypes import cdll, windll, create_string_buffer, c_char_p, c_void_p
from ctypes.wintypes import HANDLE
zk = windll.LoadLibrary("C:/Windows/System32/plcommpro.dll")
zk.Connect.argtypes = [c_char_p]
zk.Connect.restype = HANDLE
zk.SetDeviceData.argtypes = (HANDLE, c_char_p, c_char_p, c_char_p)
zk.SetDeviceData.restypes = ctypes.c_int
zk.Disconnect.argtypes = [HANDLE]
zk.Disconnect.restypes = c_void_p
params = b"protocol=TCP,ipaddress=192.168.100.178,port=4370,timeout=2000,passwd="
params_buf = c_char_p(params)
handler = zk.Connect(params_buf)
string = "Handler is: {0}\n".format(handler)
print(string)
try:
table = b"user"
data = b"Pin=9999\tPassword=1793\tName=Test\tStartTime=20190522\tEndTime=2010523"
options = b""
table_buf = c_char_p(table)
data_buf = c_char_p(data)
ret = zk.SetDeviceData(handler, table_buf, data_buf, options)
del table_buf
del data_buf
result = "Result: {0}".format(ret)
print(result)
except Exception as e:
print(e)
zk.Disconnect(handler)TraceBack:
Traceback (most recent call last):
File "tmpdll.py", line 35, in <module>
ret = zk.SetDeviceData(handler, table, data, options)
OSError: exception: access violation writing 0x000000005EF65040发布于 2020-12-15 23:27:19
在python3.7上如何生成handle似乎存在一些问题。
我测试了其他版本,似乎在3.5版本之后出现了错误,下面的任何版本似乎都正常工作。
https://stackoverflow.com/questions/56265380
复制相似问题