一.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;
}
點擊調試就可以運行了