在开发 EasyCVR 的部分功能过程中,需要编写 C++ 代码,生成动态库后,由其他项目调用。C++ 可以说是C语言的继承,不仅拥有计算机高效运行的实用性特征,同时还致力于提高大规模程序的编程质量与程序设计语言的问题描述能力。因此在部分开发我们研发团队都会用C++编写。
在调用生成的动态库时,出现以下问题:
0x00007FFC480DB652 (bd_license.dll) (easyface.exe 中)处有未经处理的异常: 0xC0000005: 读取位置 0x000001C79E2DE000 时发生访问冲突。
原因分析
1、首先检查了代码,确认代码无问题,且未出现访问越界的问题。
2、再次查看调用的 dll 文件(动态库),主要是 bd_licence.dll 文件中引起的,查看该 dll 为 Release 版本生成的动态库。
3、查看项目配置,在生成的时候,配置选择为 Debug,即生成的 dll 库为 Debug 版本的动态库。
因此确认原因:Debug版本的dll调用了Release版本的dll文件。因为 Debug版本会添加部分额外的信息用于调试,所以不同版本的动态库调用,导致读取内存地址不一致,出现此种访问冲突,最终中断。
解决方案
在项目编译的时候,选择 Release 版本,生成对应的 Release 版本的动态库,即可正常使用。
关于EasyCVR视频平台
EasyCVR安防视频云服务的主要功能是将本地局域网内连通的RTSP视频源,包括但不限于数字网络摄像机、DVR、NVR、编码器等设备视频流,通过RTMP协议推送到阿里、腾讯等公有云厂商的视频服务中,具备优秀的视频转码、播放、级联能力。同时该新系统也支持海康SDK、Ehome协议,GB28181国标协议,是一套真正的视频融合平台。
EasyCVR已经支持集成海康EHome协议,感兴趣的用户可以阅读一下《EasyCVR集成海康EHome协议系列——配置及协议介绍》、《EasyCVR集成海康EHome协议系列——Ehome协议调用流程介绍》等文。