资源简介
1、ctypes 使用DLL中的函数,比如登陆函数
2、用ctypes构造一块对齐内存的buffer。然后传递给dll函数使用。
3、构造大华CONFIG API所需的JSON。
4、对json中的汉字和数据结构做相应调整。
5、详细的或扩展的使用,需要参考大华SDK文档。此包定义了6行文本,但是都处于同一位置。
6、因为用了json传递配置,某些摄像头是不支持的,可以参考此文档,使用其他DLL函数实现。但是json才是最好用的吧。
7、也在C ,VC中调试了。但是VC在文字叠加时压包居然报错。
8、我的用意在于,从动态资源接口生成字符串。比如收音机什么。目前有厂家提供字符叠加器,也是相似原理。
9、代码较乱,欢迎交流。
代码片段和文件信息
#! usr/bin/python
#coding=utf-8
from ctypes.wintypes import DWORD
from ctypes import *
import time
import ctypes
import ctypes.util
import json
Objdll = WinDLL(“d:/python/dhnetsdk.dll“)
def DisConnectFunc( lLoginID a nDVRPort dwUser):
printf(“Device disconn IP=%s+++++++++++++++++++++++\n“);
class msginf(Structure):
_fields_ = [
(‘bEnable‘ c_bool)
(‘dwPosition‘ DWORD * 6)
(‘szStrings‘ c_char_p *6 )
]
def ctypes_alloc_aligned(size alignment):
buf_size = size + (alignment - 1)
#?bytearray??
raw_memory = bytearray(buf_size)
#?raw_memory?ctypes
ctypes_raw_type = (ctypes.c_char * buf_size)
ctypes_raw_memory = ctypes_raw_type.from_buffer(raw_memory)
#?ctypesaddressof???
raw_address = ctypes.addressof(ctypes_raw_memory)
offset = raw_address % alignment
#????ó??
offset_to_aligned = (alignment - offset) % alignment
ctypes_aligned_type = (ctypes.c_char * (buf_size - offset_to_aligned))
#????ctype
ctypes_aligned_memory = ctypes_aligned_type.from_buffer(raw_memory offset_to_aligned)
return ctypes_aligned_memory
libc = ctypes.CDLL(ctypes.util.find_library(‘c‘))
#?4k?
CMPFUNC = CFUNCTYPE(c_int64 POINTER(c_char)c_int64 DWORD)
CMPFUNC = CFUNCTYPE(c_int64 POINTER(c_char)c_int64 DWORD)
_callback = CMPFUNC( DisConnectFunc)
Objdll.CLIENT_Init(_callback 0); #如果没有这句就不能登录. 这个函数是凑合注册和定义的..参数是按照文档要求的
Objdll.CLIENT_SetAutoReconnect(_callback 0);
#// 豸????
#CLIENT_NET_API void CALL_METHOD CLIENT_SetConnectTime(int nWaitTime int nTryTimes);
Objdll.CLIENT_SetConnectTime(30003)
i=c_int(13)
ipcamID=c_long()
ipcamID= Objdll.CLIENT_Login(b“10.71.12.62“37777b“admin“b“admin“0 byref(i))
print (“出错代码“i)
print( ‘handle‘ipcamID)
#i成功返回0,否则是错误码,比如密码错1 文档中有说明 成功返回一个大数,是handle. 失败则是0
#这个buf的内存函数很关键,有了它才有了后面的一切。对于python 调用来说。需要传递一个合适的引用。可读可写。注释被我切换代码时干掉了。
buf=ctypes_alloc_aligned(32*10244096)
CMD_STR=b“VideoWidget“ # b“Channeltitle“ #
re =Objdll.CLIENT_GetNewDevConfig(ipcamIDCMD_STR0byref(buf)32*1024byref(i)5000)
print (“取参数:“rei)
ff=open(“d:/python/json12.py““w+“)
ss=buf.value.strip().decode()
if re and ss:
oo=json.loads(ss)
print(“\r\n返回长度:“ len(ss))
if len(ss)<200:
print(ss“\r\n\r\n“oo“\r\n\r\n“)
ff.write(ss+“\r\n“)
ff.close()
print (oo[“params“][“table“][‘Customtitle‘] )
Custom= oo[“params“][“table“][‘Customtitle‘]
Custom[0][“PreviewBlend“]= True # Custom[0][“EncodeBlend“]
Custom[0][“EncodeBlend“]= True # Custom[0][“PreviewBlend“]
Custom[0][“Text“]= “eTrue“ #这里是占位符了。
param=Custom [0]
# 做为utf-8字符,json模块打包会改称 ‘\uec98\uef88’这样四个字节的样子。而dll接口要求中文是三字节。测试发现,发现这样可以。
#json 可以指定参数。那时就简单了。目前这是显示中文的笨方法。
param=json.dumps(param) .replace(‘eTrue‘‘条目测试 ‘) .e
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 4282 2017-09-18 08:18 wjcipcamerasdk4.py
文件 8814676 2017-06-22 14:29 dhnetsdk.dll_win64
文件 8814676 2017-06-22 14:29 dhnetsdk.dll
----------- --------- ---------- ----- ----
17633634 3
相关资源
- Flask Web开发:基于Python的Web应用开发
- 利用 Python 进行数据分析 第二版 中文
- TMDB500电影数据分析
- pygame.whl -1.9.3-cp37-cp37m-win_amd64+win32两个
-
Python_The Bible_3 Manusc
ripts in 1 book-Ma - Mastering Python Design Patterns精通Python设计
- Learning OpenCV 3 Computer Vision with Python
- python opengl编程
- 生物信息python中文版.pdf
- GTK+、glade学习C、Python实现
- 3ds Max Python API
- 算法与数据结构python版北大内部教材
- dlib-19.19.0-cp38-cp38-win_amd64.zip
- 项目实战 Python Django 个人网站 电影推
- python推箱子游戏
- Python语言程序设计2018版电子教案
- Practical Quantum Computing for Developers
- 【Python 知识图谱】(高清、超详细)
- 基于django的一个博客的前后端基础设
- python贪吃蛇进阶版完整代码
- 图像处理的详细python程序
- 5. 深度学习中的目标检测 python代码实
- OpenCV-Python入门教程.pdf
- 《编写高质量代码:改善Python程序的
- 鱼c工作室小甲鱼零基础学python全套课
- 快速入门python培训教程.ppt
- Python-即时通讯Python实现web版多人聊天
- 逻辑回归Python源代码
- micropython中文教程嵌入式详细教程
- python写的一个爬取指定电影链接
评论
共有 条评论