このドキュメントはアーカイブされており、メンテナンスされていません。

Marshal.Copy メソッド (Int16[], Int32, IntPtr, Int32)

1 次元の 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

コピー元の 1 次元配列。

startIndex

Copy を開始する配列内の 0 から始まるインデックス。

destination

コピー先のメモリ ポインタ。

length

コピーする配列要素の数。

例外の種類条件

ArgumentOutOfRangeException

startIndex および length は有効ではありません。

ArgumentNullException

sourcestartIndexdestination、または length が null 参照 (Visual Basic では Nothing) です。

このメソッドを使用すると、1 次元の .NET ベースの配列のサブセットを C スタイルのアンマネージ配列にコピーできます。

メモメモ

このメソッドは 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);
        }
        


    }

}

  • SecurityPermission  (アンマネージ コードを呼び出すために必要なアクセス許可)。 UnmanagedCode (関連する列挙体)。LinkDemand (セキュリティ アクション)。

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
表示: