zoukankan      html  css  js  c++  java
  • C# 调用API test

                //托管内存中的数据 复制到非托管内存中
                IntPtr ptrURL = Marshal.StringToHGlobalAnsi("123465");
                //释放在非托管中分配的内存
                Marshal.FreeHGlobal(ptrURL);
    
    
                NET_DVR_StartRemoteConfig(0,0,
                    ptrURL, //字符串在内存中的地址
                    "123465".Length,//长度
                    callback //回调函数
                    ,IntPtr.Zero
                    );
    
            }
    
    
            // 调用API
            /*
             函数原型
             LONG NET_DVR_StartRemoteConfig(  
             LONG    lUserID,                              //  int
             DWORD   dwCommand,                            //  uint
             LPVOID  lpInBuffer,                           //  IntPtr
             DWORD   dwInBufferLen,                        //  Int32
             fRemoteConfigCallback    cbStateCallback,     //  RemoteConfigCallback
             LPVOID  pUserData                             //  IntPtr
             );
             callback 原型
             该原型 与委托的关联
             public delegate void RemoteConfigCallback(uint dwType, IntPtr lpBuffer, uint dwBufLen, IntPtr pUserData);
    
             //声明函数类型 ???
             typedef void(CALLBACK *fRemoteConfigCallback)(  
             DWORD     dwType,
             void      *lpBuffer,  
             DWORD     dwBufLen,  
             void      *pUserData
             );
             */
            [DllImportAttribute(@"HCNetSDK.dll")]
            public static extern int NET_DVR_StartRemoteConfig(
                int lUserID,
                uint dwCommand, 
                IntPtr lpInBuffer, 
                Int32 dwInBufferLen,
                RemoteConfigCallback cbStateCallback,
                IntPtr pUserData
                );
      //从非托管内存中读取一个32位带符号的整数
                uint dwStatus = (uint)Marshal.ReadInt32(ptrURL);
    //返回 从指定句柄开始 在非托管 Ansi字符串中第一个0 之前的所有字符 string strCardInfoSearch = Marshal.PtrToStringAnsi(ptrURL);
    //解析包数据 ptrURL = Marshal.StringToHGlobalAnsi("123465"); /* 1B = 8bit ==1byte 1KB=1024B 1MB=1024KB */ byte[] bUserInfoSearch = new byte[1024 * 10]; //10kb大小 //将数据从非 托管内存指针 复制到托管数组中 Marshal.Copy( ptrURL,//指针地址 bUserInfoSearch, //数组 0, // 开始索引 bUserInfoSearch.Length //长度 ); //以utf8编码读取数组 string strUserInfoSearch = System.Text.Encoding.UTF8.GetString(bUserInfoSearch);
                    using (var ms = new MemoryStream())
                    {
                        Request.Body.CopyTo(ms);
                        var myByteArray = ms.ToArray();
                        string postStr = System.Text.Encoding.UTF8.GetString(myByteArray);
    
    
                    }
                    //获取对象大小
                    Int32 nSize = Marshal.SizeOf(struLocalCfg);
                    //分配内存
                    IntPtr ptrLocalCfg = Marshal.AllocHGlobal(nSize);
                    //将数据从托管对象封送到非托管内存块
                    Marshal.StructureToPtr(struLocalCfg, ptrLocalCfg, false);


           

  • 相关阅读:
    547. Friend Circles
    399. Evaluate Division
    684. Redundant Connection
    327. Count of Range Sum
    LeetCode 130 被围绕的区域
    LeetCode 696 计数二进制子串
    LeetCode 116 填充每个节点的下一个右侧节点
    LeetCode 101 对称二叉树
    LeetCode 111 二叉树最小深度
    LeetCode 59 螺旋矩阵II
  • 原文地址:https://www.cnblogs.com/enych/p/12455375.html
Copyright © 2011-2022 走看看