Recently need to do a C # version of the control terminal, control the camera, get the camera's horizontal angle and vertical angle
To get the angle of the current camera, you need to call a function of type bool named Net_dvr_getdvrconfig
In C + +, function definition: net_dvr_getdvrconfig (LONG Luserid, DWORD Dwcommand,long Lchannel, LPVoid lpOutBuffer, DWORD dwoutbuffersize , Lpdword lpbytesreturned)
In the C # encapsulation process, the function changes to:
[DllImport (@ "HCNetSDK.dll")]
public static extern bool Net_dvr_getdvrconfig (int luserid, uint dwcommand, int lchannel, IntPtr lpoutbuffer, uint DWOUTBU Ffersize, ref uint lpbytesreturned);
In the process of the call, the conversion of the fourth parameter was encountered with a problem
First look at the function usage inside the C++demo:
1Net_dvr_ptzpos M_ptzpos = {0};2 DWORD dwreturned;3BOOL BRet = Net_dvr_getdvrconfig (M_luserid[m_struslavecameracond.byid], Net_dvr_get_ptzpos,0, &m_ptzpos,sizeof(Net_dvr_ptzpos), &dwreturned);4 if(!BRet)5 {6G_pmaindlg->addlog (M_ideviceindex, operation_fail_t,"Net_dvr_get_ptzpos");7 return;8 }9 Ten intM_IPARA1 =HEXTODECMA (m_ptzpos.wpanpos); One intM_ipara2 =HEXTODECMA (m_ptzpos.wtiltpos); A intM_IPARA3 = HEXTODECMA (M_ptzpos.wzoompos);
C + + get angle
First, the struct is instantiated, passed in the corresponding parameter, returns the value of type bool, the value is true, gets the value inside the struct body
In C #, the type of the fourth parameter passed is converted by the LPVOID type to IntPtr type
First two documents: Marshal.structuretoptr method, Marshal.PtrToStructure method
Understanding the transformation between the IntPtr and the architecture, it's good to deal with the code as follows:
1 //first get the length of the current structure2 intNSIZEOFPTZ =marshal.sizeof (Ptz);3 //define a IntPtr type of data4IntPtr IntPtr =Marshal.allochglobal (NSIZEOFPTZ);5Devideangle = Chcnetsdk.net_dvr_getdvrconfig (_mluserid, Chcnetsdk.net_dvr_get_ptzpos,0, IntPtr, (UINT) NSIZEOFPTZ,refdwreturned);6 //convert IntPtr data into struct structure7Ptz = (chcnetsdk.net_dvr_ptzpos) marshal.ptrtostructure (INTPTR,typeof(Chcnetsdk.net_dvr_ptzpos));8Pan =HEXTODECMA (ptz.wpanpos);9Tit = HEXTODECMA (ptz.wtiltpos);
C # Get Angle
C # Wrapper SDK gets the camera's horizontal and vertical angles