Marshal.Copy Метод
Определение
Важно!
Некоторые сведения относятся к предварительной версии продукта, в которую до выпуска могут быть внесены существенные изменения. Майкрософт не предоставляет никаких гарантий, явных или подразумеваемых, относительно приведенных здесь сведений.
Копирует данные из управляемого массива в указатель неуправляемой памяти или из указателя неуправляемой памяти в управляемый массив.
Перегрузки
Copy(Single[], Int32, IntPtr, Int32) |
Копирует данные из одномерного управляемого массива чисел с плавающей запятой одинарной точности в указатель неуправляемой памяти. |
Copy(IntPtr, Single[], Int32, Int32) |
Копирует данные из указателя неуправляемой памяти в управляемый массив чисел с плавающей запятой одиночной точности. |
Copy(IntPtr, IntPtr[], Int32, Int32) |
Копирует данные из указателя неуправляемой памяти в управляемый массив IntPtr. |
Copy(IntPtr, Int64[], Int32, Int32) |
Копирует данные из указателя неуправляемой памяти в одномерный управляемый массив 64-битных целых чисел со знаком. |
Copy(IntPtr, Int32[], Int32, Int32) |
Копирует данные из указателя неуправляемой памяти в одномерный управляемый массив 32-битных целых чисел со знаком. |
Copy(IntPtr, Int16[], Int32, Int32) |
Копирует данные из указателя неуправляемой памяти в одномерный управляемый массив 16-битных целых чисел со знаком. |
Copy(IntPtr, Double[], Int32, Int32) |
Копирует данные из неуправляемого указателя памяти в управляемый массив чисел с плавающей запятой двойной точности. |
Copy(IntPtr[], Int32, IntPtr, Int32) |
Копирует данные из одномерного управляемого массива IntPtr в неуправляемый указатель памяти. |
Copy(IntPtr, Byte[], Int32, Int32) |
Копирует данные из указателя неуправляемой памяти в одномерный управляемый массив 8-битных целых чисел без знака. |
Copy(Int64[], Int32, IntPtr, Int32) |
Копирует данные из одномерного управляемого массива 64-битных целых чисел со знаком в указатель неуправляемой памяти. |
Copy(Int32[], Int32, IntPtr, Int32) |
Копирует данные из одномерного управляемого массива 32-битных целых чисел со знаком в указатель неуправляемой памяти. |
Copy(Int16[], Int32, IntPtr, Int32) |
Копирует данные из одномерного управляемого массива 16-битных целых чисел со знаком в указатель неуправляемой памяти. |
Copy(Double[], Int32, IntPtr, Int32) |
Копирует данные из одномерного управляемого массива чисел с плавающей запятой двойной точности в указатель неуправляемой памяти. |
Copy(Char[], Int32, IntPtr, Int32) |
Копирует данные из одномерного управляемого массива символов в неуправляемый указатель памяти. |
Copy(IntPtr, Char[], Int32, Int32) |
Копирует данные из указателя неуправляемой памяти в управляемый массив символов. |
Copy(Byte[], Int32, IntPtr, Int32) |
Копирует данные из одномерного управляемого массива 8-битных целых чисел без знака в указатель неуправляемой памяти. |
Copy(Single[], Int32, IntPtr, Int32)
- Исходный код:
- Marshal.cs
- Исходный код:
- Marshal.cs
- Исходный код:
- Marshal.cs
Копирует данные из одномерного управляемого массива чисел с плавающей запятой одинарной точности в указатель неуправляемой памяти.
public:
static void Copy(cli::array <float> ^ source, int startIndex, IntPtr destination, int length);
[System.Security.SecurityCritical]
public static void Copy (float[] source, int startIndex, IntPtr destination, int length);
public static void Copy (float[] source, int startIndex, IntPtr destination, int length);
[<System.Security.SecurityCritical>]
static member Copy : single[] * int * nativeint * int -> unit
static member Copy : single[] * int * nativeint * int -> unit
Public Shared Sub Copy (source As Single(), startIndex As Integer, destination As IntPtr, length As Integer)
Параметры
- source
- Single[]
Одномерный массив, из которого выполняется копирование.
- startIndex
- Int32
Отсчитываемый от нуля индекс в исходном массиве, с которого начинается копирование.
- destination
-
IntPtr
nativeint
Указатель памяти, в который выполняется копирование.
- length
- Int32
Число копируемых элементов массива.
- Атрибуты
Исключения
startIndex
и length
являются недопустимыми.
Параметр source
, startIndex
, destination
или length
имеет значение null
.
Комментарии
Этот метод можно использовать для копирования подмножества одномерного управляемого массива в неуправляемый массив в стиле C.
Применяется к
Copy(IntPtr, Single[], Int32, Int32)
- Исходный код:
- Marshal.cs
- Исходный код:
- Marshal.cs
- Исходный код:
- Marshal.cs
Копирует данные из указателя неуправляемой памяти в управляемый массив чисел с плавающей запятой одиночной точности.
public:
static void Copy(IntPtr source, cli::array <float> ^ destination, int startIndex, int length);
[System.Security.SecurityCritical]
public static void Copy (IntPtr source, float[] destination, int startIndex, int length);
public static void Copy (IntPtr source, float[] destination, int startIndex, int length);
[<System.Security.SecurityCritical>]
static member Copy : nativeint * single[] * int * int -> unit
static member Copy : nativeint * single[] * int * int -> unit
Public Shared Sub Copy (source As IntPtr, destination As Single(), startIndex As Integer, length As Integer)
Параметры
- source
-
IntPtr
nativeint
Указатель памяти, из которого выполняется копирование.
- destination
- Single[]
Массив для копирования данных.
- startIndex
- Int32
Отсчитываемый от нуля индекс в массиве назначения, с которого начинается копирование.
- length
- Int32
Число копируемых элементов массива.
- Атрибуты
Исключения
Параметр source
, destination
, startIndex
или length
имеет значение null
.
Комментарии
Неуправляемые массивы в стиле C не содержат сведений о границах startIndex
, что предотвращает проверку параметров и length
. Таким образом, неуправляемые данные, соответствующие параметру source
, заполняют управляемый массив независимо от его полезности. Перед вызовом этого метода необходимо инициализировать управляемый массив с соответствующим размером.
См. также раздел
Применяется к
Copy(IntPtr, IntPtr[], Int32, Int32)
- Исходный код:
- Marshal.cs
- Исходный код:
- Marshal.cs
- Исходный код:
- Marshal.cs
Копирует данные из указателя неуправляемой памяти в управляемый массив IntPtr.
public:
static void Copy(IntPtr source, cli::array <IntPtr> ^ destination, int startIndex, int length);
[System.Security.SecurityCritical]
public static void Copy (IntPtr source, IntPtr[] destination, int startIndex, int length);
public static void Copy (IntPtr source, IntPtr[] destination, int startIndex, int length);
[<System.Security.SecurityCritical>]
static member Copy : nativeint * nativeint[] * int * int -> unit
static member Copy : nativeint * nativeint[] * int * int -> unit
Public Shared Sub Copy (source As IntPtr, destination As IntPtr(), startIndex As Integer, length As Integer)
Параметры
- source
-
IntPtr
nativeint
Указатель памяти, из которого выполняется копирование.
- destination
-
IntPtr[]
nativeint[]
Массив для копирования данных.
- startIndex
- Int32
Отсчитываемый от нуля индекс в массиве назначения, с которого начинается копирование.
- length
- Int32
Число копируемых элементов массива.
- Атрибуты
Исключения
Параметр source
, destination
, startIndex
или length
имеет значение null
.
Комментарии
Неуправляемые массивы в стиле C не содержат сведений о границах startIndex
, что предотвращает проверку параметров и length
. Таким образом, неуправляемые данные, соответствующие параметру source
, заполняют управляемый массив независимо от его полезности. Перед вызовом метода необходимо инициализировать управляемый Marshal.Copy массив с соответствующим размером.
Применяется к
Copy(IntPtr, Int64[], Int32, Int32)
- Исходный код:
- Marshal.cs
- Исходный код:
- Marshal.cs
- Исходный код:
- Marshal.cs
Копирует данные из указателя неуправляемой памяти в одномерный управляемый массив 64-битных целых чисел со знаком.
public:
static void Copy(IntPtr source, cli::array <long> ^ destination, int startIndex, int length);
[System.Security.SecurityCritical]
public static void Copy (IntPtr source, long[] destination, int startIndex, int length);
public static void Copy (IntPtr source, long[] destination, int startIndex, int length);
[<System.Security.SecurityCritical>]
static member Copy : nativeint * int64[] * int * int -> unit
static member Copy : nativeint * int64[] * int * int -> unit
Public Shared Sub Copy (source As IntPtr, destination As Long(), startIndex As Integer, length As Integer)
Параметры
- source
-
IntPtr
nativeint
Указатель памяти, из которого выполняется копирование.
- destination
- Int64[]
Массив для копирования данных.
- startIndex
- Int32
Отсчитываемый от нуля индекс в массиве назначения, с которого начинается копирование.
- length
- Int32
Число копируемых элементов массива.
- Атрибуты
Исключения
Параметр source
, destination
, startIndex
или length
имеет значение null
.
Примеры
В следующем примере массив копируется в неуправляемую память, а затем неуправляемый массив копируется обратно в управляемую память.
using System;
using System.Runtime.InteropServices;
class Example
{
static void Main()
{
// Create a managed array.
Int64[] managedArray = { 1, 2, 3, 4 };
// Initialize unmanaged 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.
Int64[] managedArray2 = new Int64[managedArray.Length];
Marshal.Copy(pnt, managedArray2, 0, managedArray.Length);
Console.WriteLine("The array was copied to unmanaged memory and back.");
}
finally
{
// Free the unmanaged memory.
Marshal.FreeHGlobal(pnt);
}
}
}
Imports System.Runtime.InteropServices
Module Example
Sub Main()
' Create a managed array.
Dim managedArray As Int64() = {1, 2, 3, 4}
' Initialize unmanaged memory to hold the array.
Dim size As Integer = Marshal.SizeOf(managedArray(0)) * managedArray.Length
Dim pnt As IntPtr = 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.
Dim managedArray2(managedArray.Length) As Int64
Marshal.Copy(pnt, managedArray2, 0, managedArray.Length)
Console.WriteLine("The array was copied to unmanaged memory and back.")
Finally
' Free the unmanaged memory.
Marshal.FreeHGlobal(pnt)
End Try
End Sub
End Module
Комментарии
Неуправляемые массивы в стиле C не содержат сведений о границах startIndex
, что предотвращает проверку параметров и length
. Таким образом, неуправляемые данные, соответствующие параметруsource
, заполняют управляемый массив независимо от его полезности. Перед вызовом этого метода необходимо инициализировать управляемый массив с соответствующим размером.
См. также раздел
Применяется к
Copy(IntPtr, Int32[], Int32, Int32)
- Исходный код:
- Marshal.cs
- Исходный код:
- Marshal.cs
- Исходный код:
- Marshal.cs
Копирует данные из указателя неуправляемой памяти в одномерный управляемый массив 32-битных целых чисел со знаком.
public:
static void Copy(IntPtr source, cli::array <int> ^ destination, int startIndex, int length);
[System.Security.SecurityCritical]
public static void Copy (IntPtr source, int[] destination, int startIndex, int length);
public static void Copy (IntPtr source, int[] destination, int startIndex, int length);
[<System.Security.SecurityCritical>]
static member Copy : nativeint * int[] * int * int -> unit
static member Copy : nativeint * int[] * int * int -> unit
Public Shared Sub Copy (source As IntPtr, destination As Integer(), startIndex As Integer, length As Integer)
Параметры
- source
-
IntPtr
nativeint
Указатель памяти, из которого выполняется копирование.
- destination
- Int32[]
Массив для копирования данных.
- startIndex
- Int32
Отсчитываемый от нуля индекс в массиве назначения, с которого начинается копирование.
- length
- Int32
Число копируемых элементов массива.
- Атрибуты
Исключения
Параметр source
, destination
, startIndex
или length
имеет значение null
.
Примеры
В следующем примере массив копируется в неуправляемую память, а затем неуправляемый массив копируется обратно в управляемую память.
using System;
using System.Runtime.InteropServices;
class Example
{
static void Main()
{
// Create a managed array.
int[] managedArray = { 1, 2, 3, 4 };
// Initialize unmanaged 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.
int[] managedArray2 = new int[managedArray.Length];
Marshal.Copy(pnt, managedArray2, 0, managedArray.Length);
Console.WriteLine("The array was copied to unmanaged memory and back.");
}
finally
{
// Free the unmanaged memory.
Marshal.FreeHGlobal(pnt);
}
}
}
Imports System.Runtime.InteropServices
Module Example
Sub Main()
' Create a managed array.
Dim managedArray As Integer() = {1, 2, 3, 4}
' Initialize unmanaged memory to hold the array.
Dim size As Integer = Marshal.SizeOf(managedArray(0)) * managedArray.Length
Dim pnt As IntPtr = 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.
Dim managedArray2(managedArray.Length) As Integer
Marshal.Copy(pnt, managedArray2, 0, managedArray.Length)
Console.WriteLine("The array was copied to unmanaged memory and back.")
Finally
' Free the unmanaged memory.
Marshal.FreeHGlobal(pnt)
End Try
End Sub
End Module
Комментарии
Неуправляемые массивы в стиле C не содержат сведений о границах startIndex
, что предотвращает проверку параметров и length
. Таким образом, неуправляемые данные, соответствующие параметру source
, заполняют управляемый массив независимо от его полезности. Перед вызовом этого метода необходимо инициализировать управляемый массив с соответствующим размером.
См. также раздел
Применяется к
Copy(IntPtr, Int16[], Int32, Int32)
- Исходный код:
- Marshal.cs
- Исходный код:
- Marshal.cs
- Исходный код:
- Marshal.cs
Копирует данные из указателя неуправляемой памяти в одномерный управляемый массив 16-битных целых чисел со знаком.
public:
static void Copy(IntPtr source, cli::array <short> ^ destination, int startIndex, int length);
[System.Security.SecurityCritical]
public static void Copy (IntPtr source, short[] destination, int startIndex, int length);
public static void Copy (IntPtr source, short[] destination, int startIndex, int length);
[<System.Security.SecurityCritical>]
static member Copy : nativeint * int16[] * int * int -> unit
static member Copy : nativeint * int16[] * int * int -> unit
Public Shared Sub Copy (source As IntPtr, destination As Short(), startIndex As Integer, length As Integer)
Параметры
- source
-
IntPtr
nativeint
Указатель памяти, из которого выполняется копирование.
- destination
- Int16[]
Массив для копирования данных.
- startIndex
- Int32
Отсчитываемый от нуля индекс в массиве назначения, с которого начинается копирование.
- length
- Int32
Число копируемых элементов массива.
- Атрибуты
Исключения
Параметр source
, destination
, startIndex
или length
имеет значение null
.
Примеры
В следующем примере массив копируется в неуправляемую память, а затем неуправляемый массив копируется обратно в управляемую память.
using System;
using System.Runtime.InteropServices;
class Example
{
static void Main()
{
// Create a managed array.
short[] managedArray = { 1, 2, 3, 4 };
// Initialize unmanaged 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 copied to unmanaged memory and back.");
}
finally
{
// Free the unmanaged memory.
Marshal.FreeHGlobal(pnt);
}
}
}
Imports System.Runtime.InteropServices
Module Example
Sub Main()
' Create a managed array.
Dim managedArray As Short() = {1, 2, 3, 4}
' Initialize unmanaged memory to hold the array.
Dim size As Integer = Marshal.SizeOf(managedArray(0)) * managedArray.Length
Dim pnt As IntPtr = 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.
Dim managedArray2(managedArray.Length) As Short
Marshal.Copy(pnt, managedArray2, 0, managedArray.Length)
Console.WriteLine("The array was copied to unmanaged memory and back.")
Finally
' Free the unmanaged memory.
Marshal.FreeHGlobal(pnt)
End Try
End Sub
End Module
Комментарии
Неуправляемые массивы в стиле C не содержат сведений о границах startIndex
, что предотвращает проверку параметров и length
. Таким образом, неуправляемые данные, соответствующие параметру source
, заполняют управляемый массив независимо от его полезности. Перед вызовом этого метода необходимо инициализировать управляемый массив с соответствующим размером.
См. также раздел
Применяется к
Copy(IntPtr, Double[], Int32, Int32)
- Исходный код:
- Marshal.cs
- Исходный код:
- Marshal.cs
- Исходный код:
- Marshal.cs
Копирует данные из неуправляемого указателя памяти в управляемый массив чисел с плавающей запятой двойной точности.
public:
static void Copy(IntPtr source, cli::array <double> ^ destination, int startIndex, int length);
[System.Security.SecurityCritical]
public static void Copy (IntPtr source, double[] destination, int startIndex, int length);
public static void Copy (IntPtr source, double[] destination, int startIndex, int length);
[<System.Security.SecurityCritical>]
static member Copy : nativeint * double[] * int * int -> unit
static member Copy : nativeint * double[] * int * int -> unit
Public Shared Sub Copy (source As IntPtr, destination As Double(), startIndex As Integer, length As Integer)
Параметры
- source
-
IntPtr
nativeint
Указатель памяти, из которого выполняется копирование.
- destination
- Double[]
Массив для копирования данных.
- startIndex
- Int32
Отсчитываемый от нуля индекс в массиве назначения, с которого начинается копирование.
- length
- Int32
Число копируемых элементов массива.
- Атрибуты
Исключения
Параметр source
, destination
, startIndex
или length
имеет значение null
.
Примеры
В следующем примере массив копируется в неуправляемую память, а затем неуправляемый массив копируется обратно в управляемую память.
using System;
using System.Runtime.InteropServices;
class Example
{
static void Main()
{
// Create a managed array.
double[] managedArray = { 0.1, 0.2, 0.3, 0.4 };
// Initialize unmanaged 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.
double[] managedArray2 = new double[managedArray.Length];
Marshal.Copy(pnt, managedArray2, 0, managedArray.Length);
Console.WriteLine("The array was copied to unmanaged memory and back.");
}
finally
{
// Free the unmanaged memory.
Marshal.FreeHGlobal(pnt);
}
}
}
Imports System.Runtime.InteropServices
Module Example
Sub Main()
' Create a managed array.
Dim managedArray As Double() = {0.1, 0.2, 0.3, 0.4}
' Initialize unmanaged memory to hold the array.
Dim size As Integer = Marshal.SizeOf(managedArray(0)) * managedArray.Length
Dim pnt As IntPtr = 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.
Dim managedArray2(managedArray.Length) As Double
Marshal.Copy(pnt, managedArray2, 0, managedArray.Length)
Console.WriteLine("The array was copied to unmanaged memory and back.")
Finally
' Free the unmanaged memory.
Marshal.FreeHGlobal(pnt)
End Try
End Sub
End Module
Комментарии
Неуправляемые массивы в стиле C не содержат сведений о границах startIndex
, что предотвращает проверку параметров и length
. Таким образом, неуправляемые данные, соответствующие параметру source
, заполняют управляемый массив независимо от его полезности. Перед вызовом этого метода необходимо инициализировать управляемый массив с соответствующим размером.
См. также раздел
Применяется к
Copy(IntPtr[], Int32, IntPtr, Int32)
- Исходный код:
- Marshal.cs
- Исходный код:
- Marshal.cs
- Исходный код:
- Marshal.cs
Копирует данные из одномерного управляемого массива IntPtr в неуправляемый указатель памяти.
public:
static void Copy(cli::array <IntPtr> ^ source, int startIndex, IntPtr destination, int length);
[System.Security.SecurityCritical]
public static void Copy (IntPtr[] source, int startIndex, IntPtr destination, int length);
public static void Copy (IntPtr[] source, int startIndex, IntPtr destination, int length);
[<System.Security.SecurityCritical>]
static member Copy : nativeint[] * int * nativeint * int -> unit
static member Copy : nativeint[] * int * nativeint * int -> unit
Public Shared Sub Copy (source As IntPtr(), startIndex As Integer, destination As IntPtr, length As Integer)
Параметры
- source
-
IntPtr[]
nativeint[]
Одномерный массив, из которого выполняется копирование.
- startIndex
- Int32
Отсчитываемый от нуля индекс в исходном массиве, с которого начинается копирование.
- destination
-
IntPtr
nativeint
Указатель памяти, в который выполняется копирование.
- length
- Int32
Число копируемых элементов массива.
- Атрибуты
Исключения
Параметр source
, destination
, startIndex
или length
имеет значение null
.
Комментарии
Этот метод можно использовать для копирования подмножества одномерного управляемого IntPtr массива в неуправляемый массив в стиле C.
Применяется к
Copy(IntPtr, Byte[], Int32, Int32)
- Исходный код:
- Marshal.cs
- Исходный код:
- Marshal.cs
- Исходный код:
- Marshal.cs
Копирует данные из указателя неуправляемой памяти в одномерный управляемый массив 8-битных целых чисел без знака.
public:
static void Copy(IntPtr source, cli::array <System::Byte> ^ destination, int startIndex, int length);
[System.Security.SecurityCritical]
public static void Copy (IntPtr source, byte[] destination, int startIndex, int length);
public static void Copy (IntPtr source, byte[] destination, int startIndex, int length);
[<System.Security.SecurityCritical>]
static member Copy : nativeint * byte[] * int * int -> unit
static member Copy : nativeint * byte[] * int * int -> unit
Public Shared Sub Copy (source As IntPtr, destination As Byte(), startIndex As Integer, length As Integer)
Параметры
- source
-
IntPtr
nativeint
Указатель памяти, из которого выполняется копирование.
- destination
- Byte[]
Массив для копирования данных.
- startIndex
- Int32
Отсчитываемый от нуля индекс в массиве назначения, с которого начинается копирование.
- length
- Int32
Число копируемых элементов массива.
- Атрибуты
Исключения
Параметр source
, destination
, startIndex
или length
имеет значение null
.
Примеры
В следующем примере массив копируется в неуправляемую память, а затем неуправляемый массив копируется обратно в управляемую память.
using System;
using System.Runtime.InteropServices;
class Example
{
static void Main()
{
// Create a managed array.
byte[] managedArray = { 1, 2, 3, 4 };
// Initialize unmanaged 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.
byte[] managedArray2 = new byte[managedArray.Length];
Marshal.Copy(pnt, managedArray2, 0, managedArray.Length);
Console.WriteLine("The array was copied to unmanaged memory and back.");
}
finally
{
// Free the unmanaged memory.
Marshal.FreeHGlobal(pnt);
}
}
}
Imports System.Runtime.InteropServices
Module Example
Sub Main()
' Create a managed array.
Dim managedArray As Byte() = {1, 2, 3, 4}
' Initialize unmanaged memory to hold the array.
Dim size As Integer = Marshal.SizeOf(managedArray(0)) * managedArray.Length
Dim pnt As IntPtr = 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.
Dim managedArray2(managedArray.Length) As Byte
Marshal.Copy(pnt, managedArray2, 0, managedArray.Length)
Console.WriteLine("The array was copied to unmanaged memory and back.")
Finally
' Free the unmanaged memory.
Marshal.FreeHGlobal(pnt)
End Try
End Sub
End Module
Комментарии
Неуправляемые массивы в стиле C не содержат сведений о границах startIndex
, что предотвращает проверку параметров и length
. Таким образом, неуправляемые данные, соответствующие параметру source
, заполняют управляемый массив независимо от его полезности. Перед вызовом этого метода необходимо инициализировать управляемый массив с соответствующим размером.
См. также раздел
Применяется к
Copy(Int64[], Int32, IntPtr, Int32)
- Исходный код:
- Marshal.cs
- Исходный код:
- Marshal.cs
- Исходный код:
- Marshal.cs
Копирует данные из одномерного управляемого массива 64-битных целых чисел со знаком в указатель неуправляемой памяти.
public:
static void Copy(cli::array <long> ^ source, int startIndex, IntPtr destination, int length);
[System.Security.SecurityCritical]
public static void Copy (long[] source, int startIndex, IntPtr destination, int length);
public static void Copy (long[] source, int startIndex, IntPtr destination, int length);
[<System.Security.SecurityCritical>]
static member Copy : int64[] * int * nativeint * int -> unit
static member Copy : int64[] * int * nativeint * int -> unit
Public Shared Sub Copy (source As Long(), startIndex As Integer, destination As IntPtr, length As Integer)
Параметры
- source
- Int64[]
Одномерный массив, из которого выполняется копирование.
- startIndex
- Int32
Отсчитываемый от нуля индекс в исходном массиве, с которого начинается копирование.
- destination
-
IntPtr
nativeint
Указатель памяти, в который выполняется копирование.
- length
- Int32
Число копируемых элементов массива.
- Атрибуты
Исключения
startIndex
и length
являются недопустимыми.
Параметр source
, startIndex
, destination
или length
имеет значение null
.
Примеры
В следующем примере массив копируется в неуправляемую память, а затем неуправляемый массив копируется обратно в управляемую память.
using System;
using System.Runtime.InteropServices;
class Example
{
static void Main()
{
// Create a managed array.
Int64[] managedArray = { 1, 2, 3, 4 };
// Initialize unmanaged 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.
Int64[] managedArray2 = new Int64[managedArray.Length];
Marshal.Copy(pnt, managedArray2, 0, managedArray.Length);
Console.WriteLine("The array was copied to unmanaged memory and back.");
}
finally
{
// Free the unmanaged memory.
Marshal.FreeHGlobal(pnt);
}
}
}
Imports System.Runtime.InteropServices
Module Example
Sub Main()
' Create a managed array.
Dim managedArray As Int64() = {1, 2, 3, 4}
' Initialize unmanaged memory to hold the array.
Dim size As Integer = Marshal.SizeOf(managedArray(0)) * managedArray.Length
Dim pnt As IntPtr = 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.
Dim managedArray2(managedArray.Length) As Int64
Marshal.Copy(pnt, managedArray2, 0, managedArray.Length)
Console.WriteLine("The array was copied to unmanaged memory and back.")
Finally
' Free the unmanaged memory.
Marshal.FreeHGlobal(pnt)
End Try
End Sub
End Module
Комментарии
Этот метод можно использовать для копирования подмножества одномерного управляемого массива в неуправляемый массив в стиле C.
Применяется к
Copy(Int32[], Int32, IntPtr, Int32)
- Исходный код:
- Marshal.cs
- Исходный код:
- Marshal.cs
- Исходный код:
- Marshal.cs
Копирует данные из одномерного управляемого массива 32-битных целых чисел со знаком в указатель неуправляемой памяти.
public:
static void Copy(cli::array <int> ^ source, int startIndex, IntPtr destination, int length);
[System.Security.SecurityCritical]
public static void Copy (int[] source, int startIndex, IntPtr destination, int length);
public static void Copy (int[] source, int startIndex, IntPtr destination, int length);
[<System.Security.SecurityCritical>]
static member Copy : int[] * int * nativeint * int -> unit
static member Copy : int[] * int * nativeint * int -> unit
Public Shared Sub Copy (source As Integer(), startIndex As Integer, destination As IntPtr, length As Integer)
Параметры
- source
- Int32[]
Одномерный массив, из которого выполняется копирование.
- startIndex
- Int32
Отсчитываемый от нуля индекс в исходном массиве, с которого начинается копирование.
- destination
-
IntPtr
nativeint
Указатель памяти, в который выполняется копирование.
- length
- Int32
Число копируемых элементов массива.
- Атрибуты
Исключения
startIndex
и length
являются недопустимыми.
Параметр startIndex
или length
имеет значение null
.
Примеры
В следующем примере массив копируется в неуправляемую память, а затем неуправляемый массив копируется обратно в управляемую память.
using System;
using System.Runtime.InteropServices;
class Example
{
static void Main()
{
// Create a managed array.
int[] managedArray = { 1, 2, 3, 4 };
// Initialize unmanaged 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.
int[] managedArray2 = new int[managedArray.Length];
Marshal.Copy(pnt, managedArray2, 0, managedArray.Length);
Console.WriteLine("The array was copied to unmanaged memory and back.");
}
finally
{
// Free the unmanaged memory.
Marshal.FreeHGlobal(pnt);
}
}
}
Imports System.Runtime.InteropServices
Module Example
Sub Main()
' Create a managed array.
Dim managedArray As Integer() = {1, 2, 3, 4}
' Initialize unmanaged memory to hold the array.
Dim size As Integer = Marshal.SizeOf(managedArray(0)) * managedArray.Length
Dim pnt As IntPtr = 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.
Dim managedArray2(managedArray.Length) As Integer
Marshal.Copy(pnt, managedArray2, 0, managedArray.Length)
Console.WriteLine("The array was copied to unmanaged memory and back.")
Finally
' Free the unmanaged memory.
Marshal.FreeHGlobal(pnt)
End Try
End Sub
End Module
Комментарии
Этот метод можно использовать для копирования подмножества одномерного управляемого массива в неуправляемый массив в стиле C.
Применяется к
Copy(Int16[], Int32, IntPtr, Int32)
- Исходный код:
- Marshal.cs
- Исходный код:
- Marshal.cs
- Исходный код:
- Marshal.cs
Копирует данные из одномерного управляемого массива 16-битных целых чисел со знаком в указатель неуправляемой памяти.
public:
static void Copy(cli::array <short> ^ source, int startIndex, IntPtr destination, int length);
[System.Security.SecurityCritical]
public static void Copy (short[] source, int startIndex, IntPtr destination, int length);
public static void Copy (short[] source, int startIndex, IntPtr destination, int length);
[<System.Security.SecurityCritical>]
static member Copy : int16[] * int * nativeint * int -> unit
static member Copy : int16[] * int * nativeint * int -> unit
Public Shared Sub Copy (source As Short(), startIndex As Integer, destination As IntPtr, length As Integer)
Параметры
- source
- Int16[]
Одномерный массив, из которого выполняется копирование.
- startIndex
- Int32
Отсчитываемый от нуля индекс в исходном массиве, с которого начинается копирование.
- destination
-
IntPtr
nativeint
Указатель памяти, в который выполняется копирование.
- length
- Int32
Число копируемых элементов массива.
- Атрибуты
Исключения
startIndex
и length
являются недопустимыми.
Параметр source
, startIndex
, destination
или length
имеет значение null
.
Примеры
В следующем примере массив копируется в неуправляемую память, а затем неуправляемый массив копируется обратно в управляемую память.
using System;
using System.Runtime.InteropServices;
class Example
{
static void Main()
{
// Create a managed array.
short[] managedArray = { 1, 2, 3, 4 };
// Initialize unmanaged 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 copied to unmanaged memory and back.");
}
finally
{
// Free the unmanaged memory.
Marshal.FreeHGlobal(pnt);
}
}
}
Imports System.Runtime.InteropServices
Module Example
Sub Main()
' Create a managed array.
Dim managedArray As Short() = {1, 2, 3, 4}
' Initialize unmanaged memory to hold the array.
Dim size As Integer = Marshal.SizeOf(managedArray(0)) * managedArray.Length
Dim pnt As IntPtr = 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.
Dim managedArray2(managedArray.Length) As Short
Marshal.Copy(pnt, managedArray2, 0, managedArray.Length)
Console.WriteLine("The array was copied to unmanaged memory and back.")
Finally
' Free the unmanaged memory.
Marshal.FreeHGlobal(pnt)
End Try
End Sub
End Module
Комментарии
Этот метод можно использовать для копирования подмножества одномерного управляемого массива в неуправляемый массив в стиле C.
Применяется к
Copy(Double[], Int32, IntPtr, Int32)
- Исходный код:
- Marshal.cs
- Исходный код:
- Marshal.cs
- Исходный код:
- Marshal.cs
Копирует данные из одномерного управляемого массива чисел с плавающей запятой двойной точности в указатель неуправляемой памяти.
public:
static void Copy(cli::array <double> ^ source, int startIndex, IntPtr destination, int length);
[System.Security.SecurityCritical]
public static void Copy (double[] source, int startIndex, IntPtr destination, int length);
public static void Copy (double[] source, int startIndex, IntPtr destination, int length);
[<System.Security.SecurityCritical>]
static member Copy : double[] * int * nativeint * int -> unit
static member Copy : double[] * int * nativeint * int -> unit
Public Shared Sub Copy (source As Double(), startIndex As Integer, destination As IntPtr, length As Integer)
Параметры
- source
- Double[]
Одномерный массив, из которого выполняется копирование.
- startIndex
- Int32
Отсчитываемый от нуля индекс в исходном массиве, с которого начинается копирование.
- destination
-
IntPtr
nativeint
Указатель памяти, в который выполняется копирование.
- length
- Int32
Число копируемых элементов массива.
- Атрибуты
Исключения
startIndex
и length
являются недопустимыми.
Параметр source
, startIndex
, destination
или length
имеет значение null
.
Примеры
В следующем примере массив копируется в неуправляемую память, а затем неуправляемый массив копируется обратно в управляемую память.
using System;
using System.Runtime.InteropServices;
class Example
{
static void Main()
{
// Create a managed array.
double[] managedArray = { 0.1, 0.2, 0.3, 0.4 };
// Initialize unmanaged 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.
double[] managedArray2 = new double[managedArray.Length];
Marshal.Copy(pnt, managedArray2, 0, managedArray.Length);
Console.WriteLine("The array was copied to unmanaged memory and back.");
}
finally
{
// Free the unmanaged memory.
Marshal.FreeHGlobal(pnt);
}
}
}
Imports System.Runtime.InteropServices
Module Example
Sub Main()
' Create a managed array.
Dim managedArray As Double() = {0.1, 0.2, 0.3, 0.4}
' Initialize unmanaged memory to hold the array.
Dim size As Integer = Marshal.SizeOf(managedArray(0)) * managedArray.Length
Dim pnt As IntPtr = 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.
Dim managedArray2(managedArray.Length) As Double
Marshal.Copy(pnt, managedArray2, 0, managedArray.Length)
Console.WriteLine("The array was copied to unmanaged memory and back.")
Finally
' Free the unmanaged memory.
Marshal.FreeHGlobal(pnt)
End Try
End Sub
End Module
Комментарии
Этот метод можно использовать для копирования подмножества одномерного управляемого массива в неуправляемый массив в стиле C.
Применяется к
Copy(Char[], Int32, IntPtr, Int32)
- Исходный код:
- Marshal.cs
- Исходный код:
- Marshal.cs
- Исходный код:
- Marshal.cs
Копирует данные из одномерного управляемого массива символов в неуправляемый указатель памяти.
public:
static void Copy(cli::array <char> ^ source, int startIndex, IntPtr destination, int length);
[System.Security.SecurityCritical]
public static void Copy (char[] source, int startIndex, IntPtr destination, int length);
public static void Copy (char[] source, int startIndex, IntPtr destination, int length);
[<System.Security.SecurityCritical>]
static member Copy : char[] * int * nativeint * int -> unit
static member Copy : char[] * int * nativeint * int -> unit
Public Shared Sub Copy (source As Char(), startIndex As Integer, destination As IntPtr, length As Integer)
Параметры
- source
- Char[]
Одномерный массив, из которого выполняется копирование.
- startIndex
- Int32
Отсчитываемый от нуля индекс в исходном массиве, с которого начинается копирование.
- destination
-
IntPtr
nativeint
Указатель памяти, в который выполняется копирование.
- length
- Int32
Число копируемых элементов массива.
- Атрибуты
Исключения
startIndex
и length
являются недопустимыми.
Значение параметра startIndex
, destination
или length
равно null
.
Примеры
В следующем примере массив копируется в неуправляемую память, а затем неуправляемый массив копируется обратно в управляемую память.
// Remember that the actual size of System.Char in unmanaged memory is 2.
using System;
using System.Runtime.InteropServices;
class Example
{
static void Main()
{
// Create a managed array.
char[] managedArray = new char[1000];
managedArray[0] = 'a';
managedArray[1] = 'b';
managedArray[2] = 'c';
managedArray[3] = 'd';
managedArray[999] = 'Z';
// Initialize unmanaged memory to hold the array.
// int size = Marshal.SizeOf(managedArray[0]) * managedArray.Length; // Incorrect
int size = Marshal.SystemDefaultCharSize * managedArray.Length; // Correct
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.
char[] managedArray2 = new char[managedArray.Length];
Marshal.Copy(pnt, managedArray2, 0, managedArray.Length);
Console.WriteLine("Here is the roundtripped array: {0} {1} {2} {3} {4}",
managedArray2[0], managedArray2[1], managedArray2[2], managedArray2[3],
managedArray2[999]);
Console.WriteLine("The array was copied to unmanaged memory and back.");
}
finally
{
// Free the unmanaged memory.
Marshal.FreeHGlobal(pnt);
}
}
}
' Remember that the actual size of System.Char in unmanaged memory is 2.
Imports System.Runtime.InteropServices
Module Module1
Sub Main()
' Create a managed array.
Dim managedArray As Char() = New Char(999) {}
managedArray(0) = "a"c
managedArray(1) = "b"c
managedArray(2) = "c"c
managedArray(3) = "d"c
managedArray(999) = "Z"c
' Initialize unmanaged memory to hold the array.
' Dim size As Integer = Marshal.SizeOf(managedArray[0]) * managedArray.Length; ' Incorrect
Dim size As Integer = Marshal.SystemDefaultCharSize * managedArray.Length ' Correct
Dim pnt As IntPtr = 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.
Dim managedArray2 As Char() = New Char(managedArray.Length - 1) {}
Marshal.Copy(pnt, managedArray2, 0, managedArray.Length)
Console.WriteLine("Here is the roundtripped array: {0} {1} {2} {3} {4}", managedArray2(0), managedArray2(1), managedArray2(2), managedArray2(3), managedArray2(999))
Console.WriteLine("The array was copied to unmanaged memory and back.")
Finally
' Free the unmanaged memory.
Marshal.FreeHGlobal(pnt)
End Try
End Sub
End Module
Комментарии
Этот метод можно использовать для копирования подмножества одномерного управляемого массива в неуправляемый массив в стиле C.
Применяется к
Copy(IntPtr, Char[], Int32, Int32)
- Исходный код:
- Marshal.cs
- Исходный код:
- Marshal.cs
- Исходный код:
- Marshal.cs
Копирует данные из указателя неуправляемой памяти в управляемый массив символов.
public:
static void Copy(IntPtr source, cli::array <char> ^ destination, int startIndex, int length);
[System.Security.SecurityCritical]
public static void Copy (IntPtr source, char[] destination, int startIndex, int length);
public static void Copy (IntPtr source, char[] destination, int startIndex, int length);
[<System.Security.SecurityCritical>]
static member Copy : nativeint * char[] * int * int -> unit
static member Copy : nativeint * char[] * int * int -> unit
Public Shared Sub Copy (source As IntPtr, destination As Char(), startIndex As Integer, length As Integer)
Параметры
- source
-
IntPtr
nativeint
Указатель памяти, из которого выполняется копирование.
- destination
- Char[]
Массив для копирования данных.
- startIndex
- Int32
Отсчитываемый от нуля индекс в массиве назначения, с которого начинается копирование.
- length
- Int32
Число копируемых элементов массива.
- Атрибуты
Исключения
Параметр source
, destination
, startIndex
или length
имеет значение null
.
Примеры
В следующем примере массив копируется в неуправляемую память, а затем неуправляемый массив копируется обратно в управляемую память.
// Remember that the actual size of System.Char in unmanaged memory is 2.
using System;
using System.Runtime.InteropServices;
class Example
{
static void Main()
{
// Create a managed array.
char[] managedArray = new char[1000];
managedArray[0] = 'a';
managedArray[1] = 'b';
managedArray[2] = 'c';
managedArray[3] = 'd';
managedArray[999] = 'Z';
// Initialize unmanaged memory to hold the array.
// int size = Marshal.SizeOf(managedArray[0]) * managedArray.Length; // Incorrect
int size = Marshal.SystemDefaultCharSize * managedArray.Length; // Correct
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.
char[] managedArray2 = new char[managedArray.Length];
Marshal.Copy(pnt, managedArray2, 0, managedArray.Length);
Console.WriteLine("Here is the roundtripped array: {0} {1} {2} {3} {4}",
managedArray2[0], managedArray2[1], managedArray2[2], managedArray2[3],
managedArray2[999]);
Console.WriteLine("The array was copied to unmanaged memory and back.");
}
finally
{
// Free the unmanaged memory.
Marshal.FreeHGlobal(pnt);
}
}
}
' Remember that the actual size of System.Char in unmanaged memory is 2.
Imports System.Runtime.InteropServices
Module Module1
Sub Main()
' Create a managed array.
Dim managedArray As Char() = New Char(999) {}
managedArray(0) = "a"c
managedArray(1) = "b"c
managedArray(2) = "c"c
managedArray(3) = "d"c
managedArray(999) = "Z"c
' Initialize unmanaged memory to hold the array.
' Dim size As Integer = Marshal.SizeOf(managedArray[0]) * managedArray.Length; ' Incorrect
Dim size As Integer = Marshal.SystemDefaultCharSize * managedArray.Length ' Correct
Dim pnt As IntPtr = 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.
Dim managedArray2 As Char() = New Char(managedArray.Length - 1) {}
Marshal.Copy(pnt, managedArray2, 0, managedArray.Length)
Console.WriteLine("Here is the roundtripped array: {0} {1} {2} {3} {4}", managedArray2(0), managedArray2(1), managedArray2(2), managedArray2(3), managedArray2(999))
Console.WriteLine("The array was copied to unmanaged memory and back.")
Finally
' Free the unmanaged memory.
Marshal.FreeHGlobal(pnt)
End Try
End Sub
End Module
Комментарии
Неуправляемые массивы в стиле C не содержат сведений о границах startIndex
, что предотвращает проверку параметров и length
. Таким образом, неуправляемые данные, соответствующие параметру source
, заполняют управляемый массив независимо от его полезности. Перед вызовом этого метода необходимо инициализировать управляемый массив с соответствующим размером.
См. также раздел
Применяется к
Copy(Byte[], Int32, IntPtr, Int32)
- Исходный код:
- Marshal.cs
- Исходный код:
- Marshal.cs
- Исходный код:
- Marshal.cs
Копирует данные из одномерного управляемого массива 8-битных целых чисел без знака в указатель неуправляемой памяти.
public:
static void Copy(cli::array <System::Byte> ^ source, int startIndex, IntPtr destination, int length);
[System.Security.SecurityCritical]
public static void Copy (byte[] source, int startIndex, IntPtr destination, int length);
public static void Copy (byte[] source, int startIndex, IntPtr destination, int length);
[<System.Security.SecurityCritical>]
static member Copy : byte[] * int * nativeint * int -> unit
static member Copy : byte[] * int * nativeint * int -> unit
Public Shared Sub Copy (source As Byte(), startIndex As Integer, destination As IntPtr, length As Integer)
Параметры
- source
- Byte[]
Одномерный массив, из которого выполняется копирование.
- startIndex
- Int32
Отсчитываемый от нуля индекс в исходном массиве, с которого начинается копирование.
- destination
-
IntPtr
nativeint
Указатель памяти, в который выполняется копирование.
- length
- Int32
Число копируемых элементов массива.
- Атрибуты
Исключения
startIndex
и length
являются недопустимыми.
Параметр source
, startIndex
, destination
или length
имеет значение null
.
Примеры
В следующем примере массив копируется в неуправляемую память с помощью Copy(Byte[], Int32, IntPtr, Int32) перегрузки, а затем копируется неуправляемый массив обратно в управляемую память с помощью перегрузки Copy(IntPtr, Byte[], Int32, Int32) .
using System;
using System.Runtime.InteropServices;
class Example
{
static void Main()
{
// Create a managed array.
byte[] managedArray = { 1, 2, 3, 4 };
// Initialize unmanaged 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.
byte[] managedArray2 = new byte[managedArray.Length];
Marshal.Copy(pnt, managedArray2, 0, managedArray.Length);
Console.WriteLine("The array was copied to unmanaged memory and back.");
}
finally
{
// Free the unmanaged memory.
Marshal.FreeHGlobal(pnt);
}
}
}
Imports System.Runtime.InteropServices
Module Example
Sub Main()
' Create a managed array.
Dim managedArray As Byte() = {1, 2, 3, 4}
' Initialize unmanaged memory to hold the array.
Dim size As Integer = Marshal.SizeOf(managedArray(0)) * managedArray.Length
Dim pnt As IntPtr = 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.
Dim managedArray2(managedArray.Length) As Byte
Marshal.Copy(pnt, managedArray2, 0, managedArray.Length)
Console.WriteLine("The array was copied to unmanaged memory and back.")
Finally
' Free the unmanaged memory.
Marshal.FreeHGlobal(pnt)
End Try
End Sub
End Module
Комментарии
Этот метод можно использовать для копирования подмножества одномерного управляемого массива в неуправляемый массив в стиле C.