Я пытаюсь подключиться к счетной камере hikvision iDS-2CD6810F / C. Я использую golang вер. 1.14.2 и SDK EN-HCNetSDKV6.1.4.17_build20200331_Win64
package main
import (
"fmt"
"os"
"path/filepath"
"syscall"
"unsafe"
)
var (
hcNetSDK *syscall.LazyDLL
netDVRInit *syscall.LazyProc
netDVRSetConnectTime *syscall.LazyProc
netDVRSetReconnect *syscall.LazyProc
netDVRLogin *syscall.LazyProc
netDVRGetLastError *syscall.LazyProc
)
const (
serialnoLen int = 48
)
type netDVRDeviceInfo struct {
sSerialNumber [serialnoLen]byte
byAlarmInPortNum byte
byAlarmOutPortNum byte
byDiskNum byte
byDVRType byte
byChanNum byte
byStartChan byte
}
func init() {
dir, _ := filepath.Abs(filepath.Dir(os.Args[0]))
hcNetSDK = syscall.NewLazyDLL(dir + "\\HCNetSDK.dll")
netDVRInit = hcNetSDK.NewProc("NET_DVR_Init")
netDVRSetConnectTime = hcNetSDK.NewProc("NET_DVR_SetConnectTime")
netDVRSetReconnect = hcNetSDK.NewProc("NET_DVR_SetReconnect")
netDVRLogin = hcNetSDK.NewProc("NET_DVR_Login")
netDVRGetLastError = hcNetSDK.NewProc("NET_DVR_GetLastError")
}
//NetDVRInit export
func NetDVRInit() {
// Initialize
r1, _, err := netDVRInit.Call()
fmt.Print("netDVRInit: ")
if r1 == 0 {
fmt.Println(err)
} else {
fmt.Println("Ok")
}
// Set connected time and reconnected time
r1, _, err = netDVRSetConnectTime.Call(5000, 1)
fmt.Print("netDVRSetConnectTime: ")
if r1 == 0 {
fmt.Println(err)
} else {
fmt.Println("Ok")
}
fmt.Print("netDVRSetReconnect: ")
r1, _, err = netDVRSetReconnect.Call(10000, 1)
if r1 == 0 {
fmt.Println(err)
} else {
fmt.Println("Ok")
}
}
//NetDVRLogin export
func NetDVRLogin() {
devInfo := new(netDVRDeviceInfo)
user, _, _ := netDVRLogin.Call(
uintptr(unsafe.Pointer(syscall.StringToUTF16Ptr("10.10.10.10"))),
8000,
uintptr(unsafe.Pointer(syscall.StringToUTF16Ptr("admin"))),
uintptr(unsafe.Pointer(syscall.StringToUTF16Ptr("admin_pass"))),
uintptr(unsafe.Pointer(devInfo)))
err, _, _ := netDVRGetLastError.Call()
fmt.Println("netDVRLogin: ")
fmt.Printf(" User: %d\n", int16(user))
fmt.Printf(" Error: %d\n", err)
}
С этим источником после вызова NetDVRInit()
и NetDVRLogin()
я получаю следующий вывод:
netDVRInit: Ok
netDVRSetConnectTime: Ok
netDVRSetReconnect: Ok
netDVRLogin:
User: -1
Error: 7
Ошибка 7 в соответствии с документацией: «Не удалось подключиться к устройству. Устройство отключено или истекло время ожидания соединения из-за сети». Но я уверен, что они верны. Есть идеи?