一.VS2022下载
去官网下载就可以了:https://visualstudio.microsoft.com/zh-hans/vs/
下载Community版本是免费的。
(2)下载后得安装包VisualStudioSetup.exe
打开:点击继续
等待下载完成,出现如下界面,这里是选择安装包和安装地址,
选这三个就可以了,其他包需要的时候可以在商店下载,放心的点击安装。
这里注意缓存文件与安装文件不能放一起,且不要有中文路径设置好后点安装
等待点确定就好。
二.配置海康环境
我们先启动VS2022,点击创建新项目
选择空项目,点击下一步
名字,路径自己定,注意要打上√
创建好后就是这样
下面我们打开海康的官方包,首先先把官方包中的路径改写为英文。
右击头文件,添加,现有项
将这四个文件全部添加进去
右键项目名选择属性
链接器,常规,附加库目录,选择要导入的库文件
库文件如下图:将路径改成下列文件夹路劲即可
链接器,常规,添加依赖项,输入HCNetSDK.lib
右键项目名,属性,C/C++,预处理器,预处理器定义,添加:_CRT_SECURE_NO_WARNINGS
我们检查一下常规,输出目录建议新建一个新文件夹
我们需要将库文件全部复制到输出目录中
至此,我们的配置基本就好了。
三.测试代码
#include <windows.h>
#include <iostream>
#include "HCNetSDK.h"#pragma comment(lib, "Ws2_32.lib")
#pragma comment(lib, "HCCore.lib")
#pragma comment(lib, "HCNetSDK.lib")using namespace std;// 全局变量
LONG g_lUserID = -1;
LONG g_lRealHandle = -1;// 异常回调
void CALLBACK g_ExceptionCallBack(DWORD dwType, LONG lUserID, LONG lHandle, void* pUser)
{if (dwType == EXCEPTION_RECONNECT){cout << "[INFO] Reconnect at " << time(NULL) << endl;}
}// 窗口回调
LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{switch (message){case WM_DESTROY:PostQuitMessage(0);break;default:return DefWindowProc(hWnd, message, wParam, lParam);}return 0;
}int main()
{// 控制台输出AllocConsole();freopen("CONOUT$", "w", stdout);cout << "[INFO] Console started." << endl;// 注册窗口HINSTANCE hInstance = GetModuleHandle(nullptr);WNDCLASSEX wcex = { sizeof(WNDCLASSEX) };wcex.style = CS_HREDRAW | CS_VREDRAW;wcex.lpfnWndProc = WndProc;wcex.hInstance = hInstance;wcex.hCursor = LoadCursor(nullptr, IDC_ARROW);wcex.hbrBackground = (HBRUSH)(COLOR_WINDOW + 1);wcex.lpszClassName = L"HKPreviewWndClass";RegisterClassEx(&wcex);// 创建显示窗口HWND hWnd = CreateWindowW(L"HKPreviewWndClass", L"Hikvision Preview",WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, 0, 800, 600,nullptr, nullptr, hInstance, nullptr);ShowWindow(hWnd, SW_SHOW);UpdateWindow(hWnd);// 初始化 SDKNET_DVR_Init();NET_DVR_SetConnectTime(2000, 1);NET_DVR_SetReconnect(10000, TRUE);NET_DVR_SetExceptionCallBack_V30(0, nullptr, g_ExceptionCallBack, nullptr);// 登录设备NET_DVR_USER_LOGIN_INFO struLoginInfo = { 0 };struLoginInfo.bUseAsynLogin = 0;strcpy_s(struLoginInfo.sDeviceAddress, "169.254.42.230"); // 替换你的设备IPstruLoginInfo.wPort = 8000;strcpy_s(struLoginInfo.sUserName, "admin");strcpy_s(struLoginInfo.sPassword, "Ding09503");NET_DVR_DEVICEINFO_V40 struDeviceInfo = { 0 };g_lUserID = NET_DVR_Login_V40(&struLoginInfo, &struDeviceInfo);if (g_lUserID < 0){cout << "[ERROR] Login failed, code: " << NET_DVR_GetLastError() << endl;NET_DVR_Cleanup();return -1;}cout << "[INFO] Login success!" << endl;// 启动预览NET_DVR_PREVIEWINFO struPreviewInfo = { 0 };struPreviewInfo.hPlayWnd = hWnd; // 显示窗口struPreviewInfo.lChannel = 1; // 通道号struPreviewInfo.dwStreamType = 0; // 主码流struPreviewInfo.dwLinkMode = 0; // TCPstruPreviewInfo.bBlocked = 1; // 阻塞g_lRealHandle = NET_DVR_RealPlay_V40(g_lUserID, &struPreviewInfo, nullptr, nullptr);if (g_lRealHandle < 0){cout << "[ERROR] Preview failed, code: " << NET_DVR_GetLastError() << endl;NET_DVR_Logout(g_lUserID);NET_DVR_Cleanup();return -1;}cout << "[INFO] Preview started successfully!" << endl;cout << "Press Enter to stop..." << endl;getchar(); // 等待用户按回车// 停止预览与清理if (g_lRealHandle >= 0) NET_DVR_StopRealPlay(g_lRealHandle);if (g_lUserID >= 0) NET_DVR_Logout(g_lUserID);NET_DVR_Cleanup();cout << "[INFO] SDK cleanup done." << endl;return 0;
}
点击调试就可以运行了