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


           

  • 相关阅读:
    进程及进程调度
    加强版水王:找出出现次数刚好是一半的数字
    寻找最小的k个数(四种方法)
    Count Primes
    深入理解计算机系统结构——并发编程
    深入理解计算机系统——系统级I/O
    深入理解计算机系统结构——虚拟存储器
    老生常谈:关于undo表空间的使用率
    OSW 快速安装部署
    Oracle参数设置之set与reset的实际案例
  • 原文地址:https://www.cnblogs.com/enych/p/12455375.html
Copyright © 2011-2022 走看看