非托管代码转换成托管代码
非托管代码转换成托管代码
解某人 发表于4年前
非托管代码转换成托管代码
  • 发表于 4年前
  • 阅读 56
  • 收藏 1
  • 点赞 0
  • 评论 0

新睿云服务器60天免费使用,快来体验!>>>   

摘要: 非托管代码转换成托管代码,当非托管代码过大时,无法直接转换,只能先拷贝字节,字转换成相应的结构
        /// <summary>
        /// 将非托管缓冲区送入托管代码
        /// </summary>
        /// <typeparam name="T">托管结构体类型</typeparam>
        /// <param name="dispPtr">指向缓冲区的指针</param>
        /// <param name="ChanNum">通道数(缓冲区中结构体的数量)</param>
        /// <returns>托管代码数据</returns>
        private T[] StructrueFill<T>(IntPtr dispPtr, int ChanNum) where T : struct
        {
            T[] structrueBuffer = new T[ChanNum];
            int structrueSize = Marshal.SizeOf(structrueBuffer[0]);
            int arrySize = structrueSize * ChanNum;
            int bufferPoint = 0;
            byte[] buffer = new byte[arrySize];
            Marshal.Copy(dispPtr, buffer, 0, arrySize);
            for(int i = 0; i < ChanNum; i++)
            {
                byte[] structBuffer = new byte[structrueSize];
                Array.Copy(buffer, bufferPoint, structBuffer, 0, structrueSize);
                structrueBuffer[i] = StructConvert.BytesToStruct(buffer, structrueBuffer[i]);
                bufferPoint += structrueSize;
            }
            return structrueBuffer;
        }


  • 打赏
  • 点赞
  • 收藏
  • 分享
共有 人打赏支持
粉丝 0
博文 12
码字总数 2387
×
解某人
如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
* 金额(元)
¥1 ¥5 ¥10 ¥20 其他金额
打赏人
留言
* 支付类型
微信扫码支付
打赏金额:
已支付成功
打赏金额: