1,221
社区成员
发帖
与我相关
我的任务
分享
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.Runtime.InteropServices;
using System.Diagnostics;
using System.IO;
namespace AlarmCSharpDemo
{
public partial class AlarmDemo : Form
{
private Int32 m_lUserID = -1;
private Int32[] m_lAlarmHandle = new Int32[200];
private int iDeviceNumber = 0; //添加设备个数
private uint iLastErr = 0;
private string strErr;
private CHCNetSDK.MSGCallBack m_falarmData = null;
public delegate void UpdateListBoxCallback(string strAlarmTime, string strDevIP, string strAlarmMsg);
public AlarmDemo()
{
InitializeComponent();
bool m_bInitSDK = CHCNetSDK.NET_DVR_Init();
if (m_bInitSDK == false)
{
MessageBox.Show("NET_DVR_Init error!");
return;
}
else
{
byte[] strIP = new byte[16 * 16];
uint dwValidNum=0;
Boolean bEnableBind=false;
//获取本地PC网卡IP信息
if (CHCNetSDK.NET_DVR_GetLocalIP(strIP, ref dwValidNum, ref bEnableBind))
{
if (dwValidNum > 0)
{
//取第一张网卡的IP地址为默认监听端口
textBoxListenIP.Text = System.Text.Encoding.UTF8.GetString(strIP, 0, 16);
}
}
//保存SDK日志 To save the SDK log
CHCNetSDK.NET_DVR_SetLogToFile(3, "C:\\SdkLog\\", true);
for (int i = 0; i < 200; i++)
{
m_lAlarmHandle[i] = -1;
}
//设置报警回调函数
m_falarmData = new CHCNetSDK.MSGCallBack(MsgCallback);
CHCNetSDK.NET_DVR_SetDVRMessageCallBack_V30(m_falarmData, IntPtr.Zero);
}
}
public void MsgCallback(int lCommand, ref CHCNetSDK.NET_DVR_ALARMER pAlarmer, IntPtr pAlarmInfo, uint dwBufLen, IntPtr pUser)
{
//通过lCommand来判断接收到的报警信息类型,不同的lCommand对应不同的pAlarmInfo内容
switch (lCommand)
{
case CHCNetSDK.COMM_ALARMHOST_CID_ALARM://报警主机CID报警上传
ProcessCommAlarm_CIDAlarm(ref pAlarmer, pAlarmInfo, dwBufLen, pUser);
break;
default:
break;
}
}
private void ProcessCommAlarm_CIDAlarm(ref CHCNetSDK.NET_DVR_ALARMER pAlarmer, IntPtr pAlarmInfo, uint dwBufLen, IntPtr pUser)
{
CHCNetSDK.NET_DVR_CID_ALARM struCIDAlarm = new CHCNetSDK.NET_DVR_CID_ALARM();
uint dwSize = (uint)Marshal.SizeOf(struCIDAlarm);
]struCIDAlarm = (CHCNetSDK.NET_DVR_CID_ALARM)Marshal.PtrToStructure(pAlarmInfo, typeof(CHCNetSDK.NET_DVR_CID_ALARM));
//报警设备IP地址
string strIP = pAlarmer.sDeviceIP;
//报警时间:年月日时分秒
string strTimeYear = (struCIDAlarm.struTriggerTime.wYear).ToString();
string strTimeMonth = (struCIDAlarm.struTriggerTime.byMonth).ToString("d2");
string strTimeDay = (struCIDAlarm.struTriggerTime.byDay).ToString("d2");
string strTimeHour = (struCIDAlarm.struTriggerTime.byHour).ToString("d2");
string strTimeMinute = (struCIDAlarm.struTriggerTime.byMinute).ToString("d2");
string strTimeSecond = (struCIDAlarm.struTriggerTime.bySecond).ToString("d2");
string strTime = strTimeYear + "-" + strTimeMonth + "-" + strTimeDay + " " + strTimeHour + ":" + strTimeMinute + ":" + strTimeSecond;
string stringAlarm = "报警主机CID报告,sCIDCode:" + struCIDAlarm.sCIDCode + ",sCIDDescribe:" + struCIDAlarm.sCIDDescribe
+ ",报告类型:" + struCIDAlarm.byReportType + ",防区号:" + struCIDAlarm.wDefenceNo + ",报警触发时间:" + strTime;
if (InvokeRequired)
{
object[] paras = new object[3];
paras[0] = DateTime.Now.ToString(); //当前PC系统时间
paras[1] = strIP;
paras[2] = stringAlarm;
listViewAlarmInfo.BeginInvoke(new UpdateListBoxCallback(UpdateClientList), paras);
}
else
{
//创建该控件的主线程直接更新信息列表
UpdateClientList(DateTime.Now.ToString(), strIP, stringAlarm);
}
}
public void UpdateClientList(string strAlarmTime, string strDevIP, string strAlarmMsg)
{
//列表新增报警信息
listViewAlarmInfo.Items.Add(new ListViewItem(new string[] { strAlarmTime, strDevIP, strAlarmMsg }));
}
private void btnLogin_Click(object sender, EventArgs e)
{
if (textBoxIP.Text == "" || textBoxPort.Text == "" ||
textBoxUserName.Text == "" || textBoxPassword.Text == "")
{
MessageBox.Show("Please input IP, Port, User name and Password!");
return;
}
if (iDeviceNumber >= 20)
{
MessageBox.Show("本程序限制最多添加20台设备!");
return;
}
string DVRIPAddress = textBoxIP.Text; //设备IP地址或者域名 Device IP
Int16 DVRPortNumber = Int16.Parse(textBoxPort.Text);//设备服务端口号 Device Port
string DVRUserName = textBoxUserName.Text;//设备登录用户名 User name to login
string DVRPassword = textBoxPassword.Text;//设备登录密码 Password to login
CHCNetSDK.NET_DVR_DEVICEINFO_V30 DeviceInfo = new CHCNetSDK.NET_DVR_DEVICEINFO_V30();
//登录设备 Login the device
m_lUserID = CHCNetSDK.NET_DVR_Login_V30(DVRIPAddress, DVRPortNumber, DVRUserName, DVRPassword, ref DeviceInfo);
if (m_lUserID < 0)
{
iLastErr = CHCNetSDK.NET_DVR_GetLastError();
strErr = "NET_DVR_Login_V30 failed, error code= " + iLastErr; //登录失败,输出错误号 Failed to login and output the error code
MessageBox.Show(strErr);
return;
}
else
{
//登录成功
iDeviceNumber++;
string str1 = "" + m_lUserID;
listViewDevice.Items.Add(new ListViewItem(new string[] { str1, DVRIPAddress, "未布防" }));//将已注册设备添加进列表
}
}
}
}
/*********************************************************
Function: MSGCallBack
Desc: (回调函数)
Input:
Output:
Return:
**********************************************************/
public delegate void MSGCallBack(int lCommand, ref NET_DVR_ALARMER pAlarmer, IntPtr pAlarmInfo, uint dwBufLen, IntPtr pUser);
[DllImport(@"..\bin\HCNetSDK.dll")]
public static extern bool NET_DVR_SetDVRMessageCallBack_V30(MSGCallBack fMessageCallBack, IntPtr pUser);
//设置报警回调函数
m_falarmData = new CHCNetSDK.MSGCallBack(MsgCallback);
CHCNetSDK.NET_DVR_SetDVRMessageCallBack_V30(m_falarmData, IntPtr.Zero);
struCIDAlarm = (CHCNetSDK.NET_DVR_CID_ALARM)Marshal.PtrToStructure(pAlarmInfo, typeof(CHCNetSDK.NET_DVR_CID_ALARM));
//---------------------------------------------------------------------------
#include <vcl.h>
#pragma hdrstop
#include "Main.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TfrmMain *frmMain;
//---------------------------------------------------------------------------
__fastcall TfrmMain::TfrmMain(TComponent* Owner)
: TForm(Owner)
{
}
//---------------------------------------------------------------------------
void __fastcall TfrmMain::FormCreate(TObject *Sender)
{
Dir = ExtractFilePath(Application->ExeName) ;
m_lUserID = -1 ;
iListenHandle = -1 ;
iDeviceNumber = 0 ; //添加设备个数
iLastErr = 0 ;
m_falarmData = NULL ;
CreateDirectory(String(Dir + "SdkLog").c_str(),NULL);
//CreateDirectory(String(Dir + "CapPic").c_str(),NULL);
//CreateDirectory(String(Dir + "Record").c_str(),NULL);
m_bInitSDK = NET_DVR_Init() ;
if (m_bInitSDK == false)
{
ShowMessage("NET_DVR_Init初始化失败!") ;
return;
}
else
{
char strIP[16][16];
DWORD dwValidNum = 0 ;
BOOL bEnableBind = false ;
void* pUser = 0 ;
//获取本地PC网卡IP信息
if(NET_DVR_GetLocalIP(strIP, &dwValidNum, &bEnableBind))
{
if (dwValidNum > 0)
{
String StrIP = "";
//取第一张网卡的IP地址为默认监听端口
for(int j=0;j<16;j++)
StrIP += String(strIP[0][j]) ;
edtListenIP->Text = StrIP ;
}
}
//保存SDK日志
NET_DVR_SetLogToFile(3, AnsiString(Dir+ "SdkLog\\").c_str(), true);
for (int i = 0; i < 200; i++)
{
m_lAlarmHandle[i] = -1 ;
}
//设置报警回调函数
m_falarmData = (MSGCallBack)(&MsgCallback) ;
//typedef void (CALLBACK *MSGCallBack)(LONG lCommand, NET_DVR_ALARMER *pAlarmer, char *pAlarmInfo, DWORD dwBufLen, void* pUser);
NET_DVR_SetDVRMessageCallBack_V30(m_falarmData, pUser);
}
}
//---------------------------------------------------------------------------
//****************************相关函数***************************************
//---------------------------------------------------------------------------
void TfrmMain::MsgCallback(int lCommand, NET_DVR_ALARMER *pAlarmer, void* pAlarmInfo, unsigned int dwBufLen, void* pUser)
{
//通过lCommand来判断接收到的报警信息类型,不同的lCommand对应不同的pAlarmInfo内容
switch (lCommand)
{
case COMM_ALARMHOST_CID_ALARM://报警主机CID报警上传
ProcessCommAlarm_CIDAlarm(pAlarmer, pAlarmInfo, dwBufLen, pUser);
break;
default:
break;
}
}
//---------------------------------------------------------------------------
void TfrmMain::ProcessCommAlarm_CIDAlarm(NET_DVR_ALARMER *pAlarmer, void* pAlarmInfo, unsigned int dwBufLen, void* pUser)
{
/* NET_DVR_CID_ALARM struCIDAlarm ;
//unsigned int dwSize = (unsigned int)sizeof(struCIDAlarm);
//struCIDAlarm = typedef(pAlarmInfo, typeid(NET_DVR_CID_ALARM));
//typedef void (NET_DVR_CID_ALARM* struCIDAlarm) pAlarmInfo ;
unsigned int dwSize = (unsigned int)sizeof(struCIDAlarm);
//报警设备IP地址
AnsiString strIP = pAlarmer.sDeviceIP;
//报警时间:年月日时分秒
AnsiString strTimeYear = (struCIDAlarm.struTriggerTime.wYear).ToAnsiString();
AnsiString strTimeMonth = (struCIDAlarm.struTriggerTime.byMonth).ToAnsiString("d2");
AnsiString strTimeDay = (struCIDAlarm.struTriggerTime.byDay).ToAnsiString("d2");
AnsiString strTimeHour = (struCIDAlarm.struTriggerTime.byHour).ToAnsiString("d2");
AnsiString strTimeMinute = (struCIDAlarm.struTriggerTime.byMinute).ToAnsiString("d2");
AnsiString strTimeSecond = (struCIDAlarm.struTriggerTime.bySecond).ToAnsiString("d2");
AnsiString strTime = strTimeYear + "-" + strTimeMonth + "-" + strTimeDay + " " + strTimeHour + ":" + strTimeMinute + ":" + strTimeSecond;
AnsiString AnsiStringAlarm = "报警主机CID报告,sCIDCode:" + struCIDAlarm.sCIDCode + ",sCIDDescribe:" + struCIDAlarm.sCIDDescribe
+ ",报告类型:" + struCIDAlarm.byReportType + ",防区号:" + struCIDAlarm.wDefenceNo + ",报警触发时间:" + strTime;
if (InvokeRequired)
{
object[] paras = new object[3];
paras[0] = DateTime.Now.ToAnsiString(); //当前PC系统时间
paras[1] = strIP;
paras[2] = AnsiStringAlarm;
listViewAlarmInfo.BeginInvoke(new UpdateListBoxCallback(UpdateClientList), paras);
}
else
{
//创建该控件的主线程直接更新信息列表
UpdateClientList(Now().FormatString("yyyy年mm月dd日 hh时nn分ss秒"), strIP, AnsiStringAlarm);
} */
}
//---------------------------------------------------------------------------
void TfrmMain::UpdateClientList(AnsiString strAlarmTime, AnsiString strDevIP, AnsiString strAlarmMsg)
{
//列表新增报警信息
//lvAlarmInfo.Items.Add(new ListViewItem(new AnsiString[] { strAlarmTime, strDevIP, strAlarmMsg }));
TListItem *liAlarmInfo;
liAlarmInfo = lvAlarmInfo->Items->Add() ;
liAlarmInfo->Caption = strAlarmTime ;
liAlarmInfo->SubItems->Add(strDevIP) ;
liAlarmInfo->SubItems->Add(strAlarmMsg) ;
}
//---------------------------------------------------------------------------
报错信息:
[bcc32 Error] Main.cpp(61): E2031 Cannot cast from 'void (* (_closure )(int,NET_DVR_ALARMER *,void *,unsigned int,void *))(int,NET_DVR_ALARMER *,void *,unsigned int,void *)' to 'void (__stdcall *)(long,NET_DVR_ALARMER *,char *,unsigned long,void *)'
Full parser context
Main.cpp(18): parsing: void _fastcall TfrmMain::FormCreate(TObject *)
//---------------------------------------------------------------------------
#include <vcl.h>
#pragma hdrstop
#include "Main.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TfrmMain *frmMain;
//---------------------------------------------------------------------------
__fastcall TfrmMain::TfrmMain(TComponent* Owner)
: TForm(Owner)
{
}
//---------------------------------------------------------------------------
void __fastcall TfrmMain::FormCreate(TObject *Sender)
{
Dir = ExtractFilePath(Application->ExeName) ;
m_lUserID = -1 ;
iListenHandle = -1 ;
iDeviceNumber = 0 ; //添加设备个数
iLastErr = 0 ;
m_falarmData = NULL ;
CreateDirectory(String(Dir + "SdkLog").c_str(),NULL);
//CreateDirectory(String(Dir + "CapPic").c_str(),NULL);
//CreateDirectory(String(Dir + "Record").c_str(),NULL);
m_bInitSDK = NET_DVR_Init() ;
if (m_bInitSDK == false)
{
ShowMessage("NET_DVR_Init初始化失败!") ;
return;
}
else
{
char strIP[16][16];
DWORD dwValidNum = 0 ;
BOOL bEnableBind = false ;
void* pUser = 0 ;
//获取本地PC网卡IP信息
if(NET_DVR_GetLocalIP(strIP, &dwValidNum, &bEnableBind))
{
if (dwValidNum > 0)
{
String StrIP = "";
//取第一张网卡的IP地址为默认监听端口
for(int j=0;j<16;j++)
StrIP += String(strIP[0][j]) ;
edtListenIP->Text = StrIP ;
}
}
//保存SDK日志
NET_DVR_SetLogToFile(3, AnsiString(Dir+ "SdkLog\\").c_str(), true);
for (int i = 0; i < 200; i++)
{
m_lAlarmHandle[i] = -1 ;
}
//设置报警回调函数
//m_falarmData = MSGCallBack((CALLBACK)MsgCallback) ;
//typedef void (CALLBACK *MSGCallBack)(LONG lCommand, NET_DVR_ALARMER *pAlarmer, char *pAlarmInfo, DWORD dwBufLen, void* pUser);
NET_DVR_SetDVRMessageCallBack_V30(m_falarmData, pUser);
}
}
//---------------------------------------------------------------------------
//****************************相关函数***************************************
//---------------------------------------------------------------------------
void CALLBACK TfrmMain::MsgCallback(int lCommand, NET_DVR_ALARMER *pAlarmer, void* pAlarmInfo, unsigned int dwBufLen, void* pUser)
{
//通过lCommand来判断接收到的报警信息类型,不同的lCommand对应不同的pAlarmInfo内容
switch (lCommand)
{
case COMM_ALARMHOST_CID_ALARM://报警主机CID报警上传
ProcessCommAlarm_CIDAlarm(pAlarmer, pAlarmInfo, dwBufLen, pUser);
break;
default:
break;
}
}
//---------------------------------------------------------------------------
void TfrmMain::ProcessCommAlarm_CIDAlarm(NET_DVR_ALARMER *pAlarmer, void* pAlarmInfo, unsigned int dwBufLen, void* pUser)
{
NET_DVR_CID_ALARM struCIDAlarm ;
//unsigned int dwSize = (unsigned int)sizeof(struCIDAlarm);
//struCIDAlarm = typedef(pAlarmInfo, typeid(NET_DVR_CID_ALARM));
//typedef void (NET_DVR_CID_ALARM* struCIDAlarm) pAlarmInfo ;
unsigned int dwSize = (unsigned int)sizeof(struCIDAlarm);
//报警设备IP地址
AnsiString strIP = pAlarmer.sDeviceIP;
//报警时间:年月日时分秒
AnsiString strTimeYear = (struCIDAlarm.struTriggerTime.wYear).ToAnsiString();
AnsiString strTimeMonth = (struCIDAlarm.struTriggerTime.byMonth).ToAnsiString("d2");
AnsiString strTimeDay = (struCIDAlarm.struTriggerTime.byDay).ToAnsiString("d2");
AnsiString strTimeHour = (struCIDAlarm.struTriggerTime.byHour).ToAnsiString("d2");
AnsiString strTimeMinute = (struCIDAlarm.struTriggerTime.byMinute).ToAnsiString("d2");
AnsiString strTimeSecond = (struCIDAlarm.struTriggerTime.bySecond).ToAnsiString("d2");
AnsiString strTime = strTimeYear + "-" + strTimeMonth + "-" + strTimeDay + " " + strTimeHour + ":" + strTimeMinute + ":" + strTimeSecond;
AnsiString AnsiStringAlarm = "报警主机CID报告,sCIDCode:" + struCIDAlarm.sCIDCode + ",sCIDDescribe:" + struCIDAlarm.sCIDDescribe
+ ",报告类型:" + struCIDAlarm.byReportType + ",防区号:" + struCIDAlarm.wDefenceNo + ",报警触发时间:" + strTime;
if (InvokeRequired)
{
object[] paras = new object[3];
paras[0] = DateTime.Now.ToAnsiString(); //当前PC系统时间
paras[1] = strIP;
paras[2] = AnsiStringAlarm;
listViewAlarmInfo.BeginInvoke(new UpdateListBoxCallback(UpdateClientList), paras);
}
else
{
//创建该控件的主线程直接更新信息列表
UpdateClientList(Now().FormatString("yyyy年mm月dd日 hh时nn分ss秒"), strIP, AnsiStringAlarm);
}
}
//---------------------------------------------------------------------------
void TfrmMain::UpdateClientList(AnsiString strAlarmTime, AnsiString strDevIP, AnsiString strAlarmMsg)
{
//列表新增报警信息
//lvAlarmInfo.Items.Add(new ListViewItem(new AnsiString[] { strAlarmTime, strDevIP, strAlarmMsg }));
TListItem *liAlarmInfo;
liAlarmInfo = lvAlarmInfo->Items->Add() ;
liAlarmInfo->Caption = strAlarmTime ;
liAlarmInfo->SubItems->Add(strDevIP) ;
liAlarmInfo->SubItems->Add(strAlarmMsg) ;
}
//---------------------------------------------------------------------------
//添加设备
void __fastcall TfrmMain::btnLoginClick(TObject *Sender)
{
if (edtIPAddress->Text==""||edtPortNumber->Text==""
||edtUserName->Text==""||edtPassword->Text=="")
{
ShowMessage("请输入设备地址、端口、用户名和密码!") ;
return ;
}
if (iDeviceNumber >= 20)
{
ShowMessage("本程序限制最多添加20台设备!");
return;
}
DVRIPAddress = edtIPAddress->Text ; //设备IP地址或者域名
DVRPortNumber = edtPortNumber->Text.ToInt() ; //设备服务端口号
DVRUserName = edtUserName->Text ; //设备登录用户名
DVRPassword = edtPassword->Text ; //设备登录密码
NET_DVR_DEVICEINFO_V30 DeviceInfo ;
//登录设备
m_lUserID = NET_DVR_Login_V30(DVRIPAddress.c_str(), DVRPortNumber, DVRUserName.c_str(), DVRPassword.c_str(), &DeviceInfo) ;
if (m_lUserID > 0)
{
iLastErr = NET_DVR_GetLastError() ;
//登录失败,输出错误号
ShowMessage("NET_DVR_Login_V30登录失败,错误代码" + String(iLastErr)) ;
}
else
{
//登录成功
ShowMessage(DVRIPAddress+"登录成功") ;
iDeviceNumber++;
TListItem *liDevice;
liDevice = lvDevice->Items->Add() ; //将已注册设备添加进列表
liDevice->Caption = " " + m_lUserID ;
liDevice->SubItems->Add(DVRIPAddress) ;
liDevice->SubItems->Add("未布防") ;
//lvDevice->Items->Add(new ListViewItem(new string[] { str1, DVRIPAddress, "未布防" }));
}
}
//---------------------------------------------------------------------------
//全部布防
void __fastcall TfrmMain::btnSetAlarmClick(TObject *Sender)
{
NET_DVR_SETUPALARM_PARAM struAlarmParam ;
struAlarmParam.dwSize = (unsigned int)sizeof(struAlarmParam);
struAlarmParam.byLevel = 1 ; //0- 一级布防,1- 二级布防
struAlarmParam.byAlarmInfoType = 1 ; //智能交通设备有效,新报警信息类型
struAlarmParam.byFaceAlarmDetection = 1 ; //1-人脸侦测
for (int i = 0; i < iDeviceNumber; i++)
{
m_lUserID = lvDevice->Items->Item[i]->Caption.ToInt() ;
m_lAlarmHandle[m_lUserID] = NET_DVR_SetupAlarmChan_V41(m_lUserID, &struAlarmParam) ;
if (m_lAlarmHandle[m_lUserID] < 0)
{
iLastErr = NET_DVR_GetLastError() ;
strErr = "布防失败,错误号:" + AnsiString(iLastErr) ; //布防失败,输出错误号
lvDevice->Items->Item[i]->SubItems->Strings[1] = strErr ;
}
else
{
lvDevice->Items->Item[i]->SubItems->Strings[1] = "布防成功" ;
}
btnSetAlarm->Enabled = false ;
}
}
//---------------------------------------------------------------------------
//全部撤防
void __fastcall TfrmMain::btnCloseAlarmClick(TObject *Sender)
{
for (int i = 0; i < iDeviceNumber; i++)
{
m_lUserID = lvDevice->Items->Item[i]->Caption.ToInt() ;
if (m_lAlarmHandle[m_lUserID] >= 0)
{
if(!NET_DVR_CloseAlarmChan_V30(m_lAlarmHandle[m_lUserID]))
{
iLastErr = NET_DVR_GetLastError() ;
strErr = "撤防失败,错误号:" + AnsiString(iLastErr) ; //撤防失败,输出错误号
lvDevice->Items->Item[i]->SubItems->Strings[1] = strErr ;
}
else
{
lvDevice->Items->Item[i]->SubItems->Strings[1] = "未布防" ;
m_lAlarmHandle[i] = -1;
}
}
else
{
lvDevice->Items->Item[i]->SubItems->Strings[1] = "未布防" ;
}
}
btnSetAlarm->Enabled = true ;
}
//---------------------------------------------------------------------------
//启动监听
void __fastcall TfrmMain::btnStartListenClick(TObject *Sender)
{
AnsiString sLocalIP = edtListenIP->Text ;
unsigned int wLocalPort = edtListenPort->Text.ToInt() ;
void* pUser = 0 ;
iListenHandle = NET_DVR_StartListen_V30(sLocalIP.c_str(), wLocalPort, m_falarmData, pUser) ;
if (iListenHandle < 0)
{
iLastErr = NET_DVR_GetLastError() ;
strErr = "启动监听失败,错误号:" + AnsiString(iLastErr) ; //撤防失败,输出错误号
ShowMessage(strErr) ;
}
else
{
ShowMessage("成功启动监听!") ;
btnStopListen->Enabled = true ;
btnStartListen->Enabled = false ;
}
}
//---------------------------------------------------------------------------
//停止监听
void __fastcall TfrmMain::btnStopListenClick(TObject *Sender)
{
if(NET_DVR_StopListen_V30(iListenHandle))
{
iLastErr = NET_DVR_GetLastError() ;
strErr = "停止监听失败,错误号:" + AnsiString(iLastErr) ; //撤防失败,输出错误号
ShowMessage(strErr) ;
}
else
{
ShowMessage("停止监听!") ;
btnStopListen->Enabled = false ;
btnStartListen->Enabled = true ;
}
}
回调函数定义赋值错误,不知道该怎么弄。
回调函数的库文件:
typedef void (CALLBACK *MSGCallBack)(LONG lCommand, NET_DVR_ALARMER *pAlarmer, char *pAlarmInfo, DWORD dwBufLen, void* pUser);
NET_DVR_API BOOL __stdcall NET_DVR_SetDVRMessageCallBack_V30(MSGCallBack fMessageCallBack, void* pUser);