继续顶。稍微讲解下思路也行

解决方案 »

  1.   

                tagSubscribeTrafficFlowInfo pGetInfo = new tagSubscribeTrafficFlowInfo();
                pGetInfo.nChnlCount =3;
                pGetInfo.nInterval =60;
                // 源目标参数  
                tagEncChannelInfo[] infos = new tagEncChannelInfo[3];  
                for (int i = 0; i < infos.Length; i++)  
                {  
                    infos[i] = new tagEncChannelInfo();  
                }            IntPtr[] intPtrArr = new IntPtr[infos.Length];
                for (int i = 0; i < 3; i++)
                {
                    infos[0].szId = "1000000$1$0$0";
                    infos[0].szName = "tesssssssss";
                    infos[0].nCameraType = (CAMERA_TYPE)0;
                    intPtrArr[0] = Marshal.AllocHGlobal(Marshal.SizeOf(infos[0]));
                    Marshal.StructureToPtr(infos[0], intPtrArr[0], false);                infos[1].szId = "1000001$1$0$0";
                    infos[1].szName = "tesssssssss";
                    infos[1].nCameraType = (CAMERA_TYPE)0;
                    intPtrArr[1] = Marshal.AllocHGlobal(Marshal.SizeOf(infos[1]));
                    Marshal.StructureToPtr(infos[1], intPtrArr[1], false);                infos[2].szId = "1000012$1$0$0";
                    infos[2].szName = "tesssssssss";
                    infos[2].nCameraType = (CAMERA_TYPE)0;
                    intPtrArr[2] = Marshal.AllocHGlobal(Marshal.SizeOf(infos[2]));
                    Marshal.StructureToPtr(infos[2], intPtrArr[2], false);
                }
                IntPtr ptr = Marshal.AllocHGlobal(Marshal.SizeOf(typeof(tagEncChannelInfo)));
                Marshal.Copy(intPtrArr, 0, ptr, 3);
                pGetInfo.pEncChannelnfo = ptr;
                pGetInfo.nSubscribeFlag = 1;
                int iRet =DHSdk.DPSDK_SubscribeTrafficFlow(m_nDLLHandle, ref pGetInfo,10000);
                if (iRet == 0)
                {
                    MessageBox.Show("订阅成功!");
                }
                else { MessageBox.Show("订阅失败!"); }
                for (int i = 0; i < 3; i++)
                {
                    Marshal.FreeHGlobal(intPtrArr[i]);
                }
                Marshal.FreeHGlobal(ptr)
    自己捣鼓了下 这样写可以吗?