黄河数字SDK C#开发系列【1】——HHNET_SetServerConfig()中的char* 转换

      在VC++里关于视频图像的编程时会经常看到这样的函数,它的一个参数表示某块内存的起始地址,另一个参数表示这块内存的长度,比如在黄河数字SDK里会看到这样的函数:

HHNET_SetServerConfig(IN HANDLE hServer,
                           IN HHCMD_NET nConfigCommand,
                           IN char *pConfigBuf,
                           IN UINT nConfigBufSize,
                           IN DWORD dwAppend=0);

这个函数的第三个参数pConfigBuf表示某块内存的起始地址,而第四个参数nConfigBufSize表示这块内存的长度,这个函数的主要功能是设置IPCamer或DVS的参数。

      下面讲解用这个函数来设置IPCamer的时钟,使之与PC同步,在C#里实现。

       首先这个函数在黄河数字SDK的网络库HHNetClient.dll,把这库在C#里导入,导入如下:

       [DllImport("HHNetClient.dll", EntryPoint = "HHNET_SetServerConfig", CallingConvention = System.Runtime.InteropServices.CallingConvention.StdCall)]
        public static extern HHERR_CODE HHNET_SetServerConfig(IntPtr hLogonServer, HHCMD_NET HHCMD_Config, IntPtr pConfig, uint pConfigSize, int dwAppend);

        设置时钟对应的命令是:HHCMD_SET_TIME,

    对应的结构体是:typedef struct DVS_DATE
    { 
           BYTE   year;
           BYTE   month;
           BYTE   day;
           BYTE   week;
           BYTE   hour;
           BYTE   minute;
           BYTE   second;
    }DVS_DATE,这些说明在黄河数字SDK使用手册上面有详细说明,在这里不做深入说明

    定义一个DVS_DATE的变量,然后赋值,如何把这个变量传入上面的函数呢,如果在VC++里的话很容易,直接获取变量的地址,把它强制转换成char*即可,但是在C#里需要转换,使用Marshal.StructureToPtr()将结构体转换成IntPtr。转换如下:

            DateTime PCTime = DateTime .Now  ;
            DVS_DATE PCDateTime;
            PCDateTime.year = (byte)(PCTime.Year & 0x0f);
            PCDateTime.month = (byte)PCTime.Month;
            PCDateTime.day = (byte)PCTime.Day;
            PCDateTime.week = (byte)PCTime.DayOfWeek;
            PCDateTime.hour = (byte)PCTime.Hour;
            PCDateTime.minute = (byte)PCTime.Minute;
            PCDateTime.second = (byte)PCTime.Second;

            IntPtr ptr = Marshal.AllocHGlobal( Marshal.SizeOf(PCDateTime));
            Marshal.StructureToPtr(PCDateTime,ptr,true);

            然后将ptr传入函数即可,如下:

            HHERR_CODE result = HHNET_SetServerConfig(hLogon,  HHCMD_NET.HHCMD_SET_TIME, ptr, (uint)Marshal.SizeOf(PCDateTime), 0);

            以上是我用C#开发的过程中的一点个人见解,希望能对网友有用

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值