当前位置: 首页 > 工具软件 > unload_dll > 使用案例 >

海康威视SDK二次开发打包后提示加载ssleay32.dll库失败的解决方案

逑兴安
2023-12-01

遇到的问题

本人在利用QT对海康威视摄像机进行SDK的二次开发时,在自己的电脑上可以运行,但是打包到其他电脑上运行时,总是出现预览失败地问题。
初始化函数NET_DVR_Init()和登录函数NET_DVR_Login_V30()均没有问题,但是运行到图像预览函数NET_DVR_RealPlay_V40()时总是出现问题,显示预览失败。
通过调试发现错误代码为
157
,查手册表示加载ssleay32.dll库失败
但是在SDK中的HCNetSDKCom文件夹中,已经包括了ssleay32.dll库文件,不知道是什么问题。
经过反复的尝试,终于找到了解决方案,供大家参考。

尝试过的解决方案

1. 方法一
根据网上找的ssleay32.dll库失败的方法

64位系统复制文件到c:\Windows\SysWOW64,开始-程序-附件-命令提示符,右键点击,管理员身份运行。键入:regsvr32 c:\Windows\SysWOW64\ssleay32.dll即可。

 通过把ssleay32.dll库复制到指定位置,发现运行失败。

2. 方法二
根据提示,把ssleay32.dll库连同EXE一起打包发布,发现还是会出现“加载ssleay32.dll库失败”的情况。

3. 方法三
通过和海康的SDK技术人员沟通,建议添加如下代码:

增加调用NET_DVR_SetSDKInitCfg(enumType类型赋值为3,lpInBuff对应libcrypto.so所在的路径字符串)、NET_DVR_SetSDKInitCfg(enumType类型赋值为4,lpInBuff对应libssl.so所在的路径字符串)指定下这些库文件加载路径看看。
NET_DVR_SetSDKInitCfg(NET_SDK_INIT_CFG_LIBEAY_PATH, “libeay32.dll”))
NET_DVR_SetSDKInitCfg(NET_SDK_INIT_CFG_SSLEAY_PATH, “ssleay32.dll”))
//可以使用绝对路径

按照技术人员的建议,发现我这里NET_DVR_SetSDKInitCfg 函数的第一个参数定义格式如下:

typedef enum tagNET_SDK_INIT_CFG_TYPE
{
    NET_SDK_INIT_CFG_TYPE_CHECK_MODULE_COM = 0, 
    NET_SDK_INIT_CFG_ABILITY = 1,  
    NET_SDK_INIT_CFG_SDK_PATH = 2  
}NET_SDK_INIT_CFG_TYPE;

第一个参数enumType无法选择3和4,也找不到常量NET_SDK_INIT_CFG_LIBEAY_PATHNET_SDK_INIT_CFG_SSLEAY_PATH。通过试验还是未解决。

最终实现的解决方案

根据技术人员的提示,我发现可能是缺少libeay32.dll库文件所导致的,故把libeay32.dll和ssleay32.dll两个文件都打包进去,最后发现成功实现了。
此外,我还发现了几个小问题,防止大家踩坑。

  1. libeay32.dll和ssleay32.dll这两个库文件的版本很多,只能用特定的一种。
  2. 多个窗体需要预览时,NET_DVR_RealPlay_V40函数最好不要写在一个函数中。
  3. SDK中自带的几个dll文件要放到Debug或Release中才可以运行。

以上就是我探究的利用QT对海康威视SDK二次开发时,打包后在其他电脑运行提示加载ssleay32.dll库失败的解决方案。

 类似资料: