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);


           

  • 相关阅读:
    家谱树 x
    codevs 1231 最优布线问题 x(find函数要从娃娃抓起系列)
    洛谷 P1546 最短网络 Agri-Net x
    codevs 5969 [AK]刻录光盘x
    家谱(gen)x
    [POJ2594]Treasure Exploration(最小路径覆盖变种,floyd算法,匈牙利算法)
    [HDOJ5855]Less Time, More profit(最大权闭合子图,二分,最大流)
    [HDOJ1054]Strategic Game(最小点覆盖,最大二分匹配,HK算法)
    [HDOJ3829]Cat VS Dog(最大独立集)
    [HDOJ3488]Tour(二分图最小匹配,KM算法)
  • 原文地址:https://www.cnblogs.com/enych/p/12455375.html
Copyright © 2011-2022 走看看