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


           

  • 相关阅读:
    【Java123】HTTP Post Form Data 传输的Java实现
    【数据库123】Oracle数据库数据实时监控
    【Java123】Java基础知识点
    【测试123】ISTQB AL
    【Git123】Git 常用命令
    [Java123] Spring
    【Java123】JavaWeb Servlet开发
    [Java123] JBoss
    [SQL123] Oracle SQL 统计一定时间间隔内的数据
    【测试123】性能测试之压力测试
  • 原文地址:https://www.cnblogs.com/enych/p/12455375.html
Copyright © 2020-2023  润新知