# handleHtext **Repository Path**: picklemorty/handleHtext ## Basic Information - **Project Name**: handleHtext - **Description**: 海康SDK头文件转Pybind11语法 - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2023-02-07 - **Last Updated**: 2023-09-24 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # ## 介绍 仓库作用于将海康设备网络SDK的c++头文件转换为pybind11格式 ### 结构体处理流程 #### 1. 使用正则或者手动代码匹配头文件中所需代码段 第一个结构体行在HCNetSDK.h文件中的第9252行 #### 2. 使用vscode加正则表达式处理相关代码段 ``` python # 删除所有注释 /\*(.|\r\n|\n)*?\*/|\/\/.* # 删除多余空行 ^\s*(?=\r?$)\n # 类似这种"MaxLength * 8"左值 运算符号 右值 会影响代码中split后的结构 # 所以需要删除运算符号两边的空格 \s[+-/*//]\s ``` #### 3. 将c++语法的代码转换为Pybind11的代码语法 在转换语法这一步中暂无适配的结构体有(pybind11支持嵌套结构体和enum只是我没写): ``` c //应该都是嵌套结构体 NET_DVR_ALRAM_FIXED_HEADER NET_DVR_ALARMINFO_V30 NET_DVR_PLAYREMOTEFILE NET_DVR_DECCHANSTATUS NET_DVR_EMAILCFG_V30 NET_DVR_JPEGPICTURE_WITH_APPENDDATA NET_DVR_DDNSPARA_V30 NET_DVR_VGA_DISP_CHAN_CFG NET_DVR_WIFI_CFG_EX NET_DVR_TRACK_MODE NET_DVR_SLAVECAMERA_CFG NET_DVR_SEARCH_EVENT_PARAM NET_DVR_SEARCH_EVENT_PARAM_V40 NET_DVR_SEARCH_EVENT_PARAM_V50 NET_DVR_SEARCH_EVENT_RET NET_DVR_SEARCH_EVENT_RET_V40 NET_DVR_SEARCH_EVENT_RET_V50 NET_DVR_PDC_ALRAM_INFO NET_DVR_AID_ALARM_V41 NET_DVR_PLATE_INFO NET_DVR_PLAYBACKREQUESTPARAM NET_DVR_PLAYBACKCALLBACKPARAM NET_DVR_SUBSYSTEM_ABILITY NET_DVR_VGA_DISP_CHAN_CFG_V40 NET_DVR_INQUEST_ROOM_INFO NET_VCA_FACESNAP_ADDINFO NET_DVR_UPGRADE_PARAM NET_VCA_HUMAN_ATTRIBUTE NET_DVR_DECODECHANCFG_SCENE NET_ITC_PLATE_RECOG_REGION_PARAM NET_ITC_LANE_MPR_PARAM NET_ITC_LANE_PRS_PARAM NET_ITC_FTP_CFG NET_DVR_TFS_ALARM NET_DVR_MB_MOBILEDEV_STATUS NET_DVR_GET_GPS_DATA_PARAM NET_DVR_LOCAL_LOG_CFG NET_DVR_PUSHALARMINFO_V40 NET_DVR_FTPCFG_V40 NET_DVR_FTP_SERVER_TEST_PARA NET_DVR_SERVER_TEST_PARA NET_DVR_MATRIX_DEC_REMOTE_PLAY_EX NET_DVR_MATRIX_DEC_REMOTE_PLAY_V50 NET_DVR_GATE_ALARMINFO NET_DVR_RESUME_INITRACKPOS_CFG NET_DVR_EXTERNAL_DEVCFG NET_DVR_VCA_DETION_CFG NET_DVR_IOOUT_CFG NET_DVR_XML_CONFIG_OUTPUT NET_DVR_TPS_REAL_TIME_INFO NET_DVR_TPS_STATISTICS_INFO NET_DVR_CENTER_SERVER_CFG NET_DVR_SINGLE_CHANNEL_LINKAGE_CFG NET_DVR_IPDEVICE_ACTIVATE_CFG NET_LOADING_DOCK_OPERATEINFO NET_DVR_SHIPIMAGE_INFO NET_DVR_SHIPSDETECTION_ALARM NET_DVR_HEATMAP_RESULT_PDC NET_AIOP_VIDEO_HEAD NET_AIOP_PICTURE_HEAD NET_AIOP_POLLING_VIDEO_HEAD NET_AIOP_POLLING_SNAP_HEAD ``` ### SDK接口函数处理流程 #### 1. 使用正则或者手动代码匹配头文件中所需代码段 第一个SDK接口函数行在HCNetSDK.h文件中的第51605行 #### 2. 使用vscode加正则表达式处理相关代码段 ``` # 删除所有注释 /\*(.|\r\n|\n)*?\*/|\/\/.* # 删除多余空行 ^\s*(?=\r?$)\n # 手动处理一下类似下面的语句行 # if ((!defined __linux__) && (!defined _WIN64)) # 作者从头文件中判断平台重载函数,我剔除掉了除win平台以外的接口函数 # 获取函数名称 NET_[\w|_]*\( # 这么写的原因是有两个非NET_DVR函数名是这样的 # NET_VPD_SetShutter # NET_VPD_SendPicture # 其次因为接口函数的参数里也有"NET_"这种字样,所以在正则里加了一个"("以正确处理 # 之后再把这个"("替换为","再稍加处理就会得到一个python列表:) ``` #### 3. 将c++语法的代码转换为Pybind11的代码语法 #### 4. 部分编译报错的接口函数列表 MSVC编译报错的的接口函数有 ``` cpp NET_DVR_Login_Check NET_DVR_StopPlayDirect NET_DVR_InitG726Decoder NET_DVR_InitG726Encoder NET_DVR_GetAirCondition NET_DVR_GetMatrixPuChan NET_DVR_PlayDirect NET_DVR_GetLocalIP NET_DVR_GetLocalIPv6 ``` ## 环境 海康设备SDK版本:CH-HCNetSDKV6.1.9.47_build20221111_win64_20221216145359 VSCode版本:1.75.1 VSCodec++扩展插件:1.13.9 Visual Studio版本:2019 编译器版本:MSCV v142-VS2019 C++ x64/x86生成工具 Windows版本:Win10 10.0.19045