添加链接
link之家
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接
相关文章推荐
爱热闹的蚂蚁  ·  pyQt5 ...·  2 年前    · 
刚毅的刺猬  ·  ionic2/3 ngClass ...·  2 年前    · 

Marshal.copy()方法用来 在托管对象(数组)和非托管对象(IntPtr)之间进行内容的复制

函数有很多重载,如下所示:

Copy(array<Byte>[]()[], Int32, IntPtr, Int32) 将一维的托管 8 位无符号整数数组中的数据复制到非托管内存指针。

Copy(array<Char>[]()[], Int32, IntPtr, Int32) 将数据从一维的托管字符数组复制到非托管内存指针。

Copy(array<Double>[]()[], Int32, IntPtr, Int32) 将数据从一维的托管双精度浮点数组复制到非托管内存指针。

Copy(array<Int16>[]()[], Int32, IntPtr, Int32) 将数据从一维的托管 16 位带符号整数数组复制到非托管内存指针。

Copy(array<Int32>[]()[], Int32, IntPtr, Int32) 将数据从一维的托管 32 位带符号整数数组复制到非托管内存指针。

Copy(array<Int64>[]()[], Int32, IntPtr, Int32) 将数据从一维的托管 64 位带符号整数数组复制到非托管内存指针。

Copy(IntPtr, array<Byte>[]()[], Int32, Int32) 将数据从非托管内存指针复制到托管 8 位无符号整数数组。

Copy(IntPtr, array<Char>[]()[], Int32, Int32) 将数据从非托管内存指针复制到托管字符数组。

Copy(IntPtr, array<Double>[]()[], Int32, Int32) 将数据从非托管内存指针复制到托管双精度浮点数组。

Copy(IntPtr, array<Int16>[]()[], Int32, Int32) 将数据从非托管内存指针复制到托管 16 位带符号整数数组。

Copy(IntPtr, array<Int32>[]()[], Int32, Int32) 将数据从非托管内存指针复制到托管 32 位带符号整数数组。

Copy(IntPtr, array<Int64>[]()[], Int32, Int32) 将数据从非托管内存指针复制到托管 64 位带符号整数数组。

Copy(IntPtr, array<IntPtr>[]()[], Int32, Int32) 将数据从非托管内存指针复制到托管 IntPtr 数组。

Copy(IntPtr, array<Single>[]()[], Int32, Int32) 将数据从非托管内存指针复制到托管单精度浮点数组。

Copy(array<IntPtr>[]()[], Int32, IntPtr, Int32) 将数据从一维托管 IntPtr 数组复制到非托管内存指针。

Copy(array<Single>[]()[], Int32, IntPtr, Int32) 将数据从一维的托管单精度浮点数组复制到非托管内存指针。

这里需要注意的是两个参数Int32类型的使用

I nt32类型的两个参数都是用来限定数组的,其中一个限定开始位置,一个限定长度

注意:长度是指数组元素的个数,而不是指字节数

  1. string name = "xuwei" ;
  2. IntPtr pName = Marshal.AllocHGlobal(2*name.Length);
  3. Marshal.Copy(name.ToCharArray(), 0, pName, name.Length);
  4. char [] cName = new char [name.Length];
  5. Marshal.Copy(pName, cName, 0, name.Length);

易知name.Length=5

(1) 给pName指针分配了 2*name.Length字节的空间

注意: Marshal.AllocHGlobal(Int32 cb) 中的参数cb是 分配的字节数

(2) 将name转换的char[]中的内容复制到pName所指的内存中, 所取长度 为char的个数,即 name.Length

(3) 给cName分配name.Length个char位置

(4) 将pName中的内容复制到cName数组中,长度同样为name.Length

原文地址:http://blog.csdn.net/xiaobai1593/article/details/7065955

c#中Marshal.Copy()方法的使用c#中Marshal.Copy方法的使用Marshal.copy()方法用来在托管对象(数组)和非托管对象(IntPtr)之间进行内容的复制函数有很多重载,如下所示:Copy(array[]()[], Int32, IntPtr, Int32) 将一维的托管 8 位无符号整数数组中的数据复制到非托管内存指针。Copy(arra
验证码(Captcha)基于十道安全栅栏, 为网页、App、小程序开发者打造立体、全面的人机验证,最大程度地保护注册登录、活动秒杀、点赞发帖、 数据 保护等各大场景下的业务安全。要做自动化脚本程序,就要能识别验证码这一关。 效果如下图: 演示程序结构 在vs2019创建WinForm窗体程序,添加相应的控件 一, 使用 OpenFileDialog类,可以选择图片文件 二, 使用 AspriseOCR.dll,识别图片,主要的函数strcode = Mar sha l.PtrToStringAnsi(OCR(path, -1)); 本文演示了, C# 使用 AspriseOCR.dll,实
C# Mar sha l. Copy 实现 托管 指针和数组之间的转换 VectorFileIO套件里面 读写文件是 IntPtr类型的指针操作。 原始 数据 是Int32数组(Int[采样点,通道]),要写入文件。读出文件要转换成反映的物理变量是采集的double波形 (double[通道,采样点])。 //初始化缓存指针对应的 托管 内存 IntPtr IntPtr变量 = Mar sha l.Al...
可见, Mar sha l主要是用来操作 托管 内存的。此类 定义的大多数 方法 是提供给开发人员的 托管 托管 编程模型之间的桥梁。例如,  StringToHGlobalAnsi 方法 将ANSI字符从指定的字符串(在 托管 复制 托管 的缓冲区。该 方法 还分配适当大小的目标堆。 System.Runtime。InteropServices Mar sha l所在的命名空间主要...
C# 不能直接 使用 C 语言的数组写法,因为 C# 是一门面向对象的语言,并且有自己的数组类型。不过,你可以 使用 C# 提供的一些 方法 将 C 语言数组转换为 C# 数组。例如: 1. 使用 Mar sha l. Copy () 方法 将 C 语言数组 复制 C# 数组 。 ```c sha rp int[] c sha rpArray = new int[10]; int[] cArray = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 }; IntPtr cArrayPtr = Mar sha l.AllocHGlobal( Mar sha l.SizeOf(typeof(int)) * cArray.Length); Mar sha l. Copy (cArray, 0, cArrayPtr, cArray.Length); Mar sha l. Copy (cArrayPtr, c sha rpArray, 0, cArray.Length); Mar sha l.FreeHGlobal(cArrayPtr); 2. 将 C 语言数组转换为字节数组,再将字节数组转换为 C# 数组。 ```c sha rp int[] c sha rpArray = new int[10]; int[] cArray = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 }; byte[] byteArray = new byte[cArray.Length * sizeof(int)]; Buffer.Block Copy (cArray, 0, byteArray, 0, byteArray.Length); Buffer.Block Copy (byteArray, 0, c sha rpArray, 0, byteArray.Length);