本文档已存档,并且将不进行维护。

Marshal.Copy 方法 (Int16[], Int32, IntPtr, Int32)

将一维的托管 16 位有符号整数数组中的数据复制到非托管内存指针。

命名空间:System.Runtime.InteropServices
程序集:mscorlib(在 mscorlib.dll 中)

public static void Copy (
	short[] source,
	int startIndex,
	IntPtr destination,
	int length
)
public static void Copy (
	short[] source, 
	int startIndex, 
	IntPtr destination, 
	int length
)
public static function Copy (
	source : short[], 
	startIndex : int, 
	destination : IntPtr, 
	length : int
)

参数

source

从中进行复制的一维数组。

startIndex

数组中 Copy 开始位置的从零开始的索引。

destination

要复制到的内存指针。

length

要复制的数组元素的数目。

异常类型条件

ArgumentOutOfRangeException

startIndexlength 无效。

ArgumentNullException

sourcestartIndexdestinationlength 为 空引用(在 Visual Basic 中为 Nothing)。

可以使用此方法将基于 .NET 的一维数组复制到非托管 C 样式数组。

Note注意

此方法使用 SecurityAction.LinkDemand 防止不可信代码对它进行调用;只有直接调用方才需要具有 SecurityPermissionAttribute.UnmanagedCode 权限。如果您的代码可从部分受信任的代码调用,则未经验证不要将用户输入传递给 Marshal 类方法。有关使用 LinkDemand 成员的重要限制,请参见 Demand 和 LinkDemand

下面的代码示例将一个数组复制到非托管内存,然后将非托管数组复制回托管内存中。

using System;
using System.Runtime.InteropServices;

class Example
{

    static void Main()
    {
        // Create a managed array.
        short[] managedArray = { 1, 2, 3, 4 };

        // Initialize unmanged memory to hold the array.
        int size = Marshal.SizeOf(managedArray[0]) * managedArray.Length;

        IntPtr pnt = Marshal.AllocHGlobal(size);

        try
        {
            // Copy the array to unmanaged memory.
            Marshal.Copy(managedArray, 0, pnt, managedArray.Length);

            // Copy the unmanaged array back to another managed array.

            short[] managedArray2 = new short[managedArray.Length];

            Marshal.Copy(pnt, managedArray2, 0, managedArray.Length);

            Console.WriteLine("The array was coppied to unmanaged memory and back.");

        }
        finally
        {
            // Free the unmanaged memory.
            Marshal.FreeHGlobal(pnt);
        }
        


    }

}

Windows 98、Windows 2000 SP4、Windows Millennium Edition、Windows Server 2003、Windows XP Media Center Edition、Windows XP Professional x64 Edition、Windows XP SP2、Windows XP Starter Edition

.NET Framework 并不是对每个平台的所有版本都提供支持。有关受支持版本的列表,请参见系统要求

.NET Framework

受以下版本支持:2.0、1.1、1.0

.NET Compact Framework

受以下版本支持:2.0、1.0
显示: