この記事は機械翻訳されています。英語版の記事を表示するには、[英語] のチェック ボックスをオンにしてください。また、テキストにマウス ポインターを合わせると、ポップアップ ウィンドウに英語のテキストを表示することもできます。
翻訳
英語

IntPtr 構造体

 

公開日: 2016年11月

ポインターまたはハンドルを表すときに使用されるプラットフォーム固有の型。

名前空間:   System
アセンブリ:  mscorlib (mscorlib.dll 内)

[SerializableAttribute]
[ComVisibleAttribute(true)]
public struct IntPtr : ISerializable

名前説明
System_CAPS_pubmethodIntPtr(Int32)

指定した 32 ビットのポインターまたはハンドルを使用して、IntPtr の新しいインスタンスを初期化します。

System_CAPS_pubmethodIntPtr(Int64)

指定した 64 ビット ポインターを使用して、IntPtr の新しいインスタンスを初期化します。

System_CAPS_pubmethodIntPtr(Void*)

指定されていない型へのポインターを使用して、IntPtr の新しいインスタンスを初期化します。

名前説明
System_CAPS_pubpropertySystem_CAPS_staticSize

このインスタンスのサイズを取得します。

名前説明
System_CAPS_pubmethodSystem_CAPS_staticAdd(IntPtr, Int32)

ポインターの値にオフセットを加算します。

System_CAPS_pubmethodEquals(Object)

このインスタンスが指定されたオブジェクトに等しいかどうかを示す値を返します。(ValueType.Equals(Object) をオーバーライドします。)

System_CAPS_pubmethodGetHashCode()

このインスタンスのハッシュ コードを返します。(ValueType.GetHashCode() をオーバーライドします。)

System_CAPS_pubmethodGetType()

現在のインスタンスの Type を取得します。(Object から継承されます。)

System_CAPS_pubmethodSystem_CAPS_staticSubtract(IntPtr, Int32)

ポインターの値からオフセットを減算します。

System_CAPS_pubmethodToInt32()

このインスタンスの値を 32 ビット符号付き整数に変換します。

System_CAPS_pubmethodToInt64()

このインスタンスの値を 64 ビット符号付き整数に変換します。

System_CAPS_pubmethodToPointer()

このインスタンスの値を指定されていない型のポインターに変換します。

System_CAPS_pubmethodToString()

現在の IntPtr オブジェクトの数値を等価の文字列形式に変換します。(ValueType.ToString() をオーバーライドします。)

System_CAPS_pubmethodToString(String)

現在の IntPtr オブジェクトの数値を等価の文字列形式に変換します。

名前説明
System_CAPS_pubfieldSystem_CAPS_staticZero

0 に初期化されたポインターまたはハンドルを表す読み取り専用フィールド。

名前説明
System_CAPS_puboperatorSystem_CAPS_staticAddition(IntPtr, Int32)

ポインターの値にオフセットを加算します。

System_CAPS_puboperatorSystem_CAPS_staticEquality(IntPtr, IntPtr)

IntPtr の 2 つの指定したインスタンスが等しいかどうかを判断します。

System_CAPS_puboperatorSystem_CAPS_staticExplicit(Int32 to IntPtr)

32 ビット符号付き整数の値を IntPtr に変換します。

System_CAPS_puboperatorSystem_CAPS_staticExplicit(Int64 to IntPtr)

64 ビット符号付き整数の値を IntPtr に変換します。

System_CAPS_puboperatorSystem_CAPS_staticExplicit(IntPtr to Int32)

指定した IntPtr の値を 32 ビット符号付き整数に変換します。

System_CAPS_puboperatorSystem_CAPS_staticExplicit(IntPtr to Int64)

指定した IntPtr の値を 64 ビット符号付き整数に変換します。

System_CAPS_puboperatorSystem_CAPS_staticExplicit(IntPtr to Void*)

指定した IntPtr の値を指定されていない型のポインターに変換します。

System_CAPS_puboperatorSystem_CAPS_staticExplicit(Void* to IntPtr)

指定されていない型の指定のポインターを IntPtr に変換します。

System_CAPS_puboperatorSystem_CAPS_staticInequality(IntPtr, IntPtr)

IntPtr の 2 つの指定したインスタンスが等しいかどうかを判断します。

System_CAPS_puboperatorSystem_CAPS_staticSubtraction(IntPtr, Int32)

ポインターの値からオフセットを減算します。

名前説明
System_CAPS_pubinterfaceSystem_CAPS_privmethodISerializable.GetObjectData(SerializationInfo, StreamingContext)

SerializationInfo オブジェクトに、現在の IntPtr オブジェクトをシリアル化するために必要なすべてのデータを格納します。

IntPtrにサイズがプラットフォーム固有の整数型が設計されています。 つまり、この型のインスタンスが 32 ビットのハードウェアやオペレーティング システムで 32 ビットと 64 ビット オペレーティング システムと 64 ビット ハードウェア上にあると想定されます。

IntPtrポインターをサポートする言語でとをサポートしない言語間のデータを参照するための一般的な手段として、型を使用することができます。

IntPtrオブジェクトは、ハンドルを保持するためにも使用できます。 インスタンスなど、IntPtrで広く使用されます、System.IO.FileStreamファイル ハンドルを保持するクラス。

IntPtr型は CLS 準拠では中に、UIntPtr型がありません。 のみ、IntPtr型が共通言語ランタイムで使用します。 UIntPtrとアーキテクチャの対称性を維持するためにほとんどの種類が提供される、IntPtr型です。

この型は、ISerializableインターフェイスです。

次の例では、マネージ ポインターを使用して、配列内の文字を反転します。 これが初期化された後、Stringオブジェクトし、その長さを取得は次のこと。

  1. 呼び出し、Marshal.StringToHGlobalAnsiに Unicode 文字列を ANSI (1 バイト) 文字としてアンマネージ メモリにコピーする方法です。 このメソッドを返します、IntPtrアンマネージ文字列の先頭を指すオブジェクトです。 Visual Basic の例ではこのポインターを直接; で使用します。C++ および c# の例では、バイトへのポインターにキャストします。

  2. 呼び出し、Marshal.AllocHGlobalアンマネージ文字列が占めるように同じバイト数を割り当てます。 このメソッドを返します、IntPtrをアンマネージ メモリ ブロックの先頭を指すオブジェクトです。 Visual Basic の例ではこのポインターを直接; で使用します。C++ および c# の例では、バイトへのポインターにキャストします。

  3. Visual Basic の例は、という名前の変数を定義offsetANSI 文字列の長さと同じです。 [次へ] チャーター ANSI 文字列内のコピー先となるアンマネージ メモリにオフセットを決定に使用されます。 その開始値は、文字列の長さであるため、コピー操作は、文字をメモリ ブロックの末尾に文字列の先頭からコピーします。

    C# および C++ の例の呼び出し、ToPointer文字列と、メモリのアンマネージ ブロックの開始アドレスへのアンマネージ ポインターを取得するメソッドを 1 つを追加して ANSI 文字列の開始アドレスへの文字列の長さよりも小さいです。 アンマネージ文字列ポインターは、文字列の末尾を指す、ため、コピー操作は、文字をメモリ ブロックの先頭に、文字列の末尾からコピーします。

  4. ループを使用して、各文字を文字列からアンマネージ メモリ ブロックにコピーします。

    Visual Basic の例では、 Marshal.ReadByte(IntPtr, Int32) ANSI 文字列に、マネージ ポインターから、指定したオフセットでバイト (または 1 バイト文字) を読み取ります。 オフセットは、ループの反復するたびにインクリメントされます。 呼び出して、Marshal.WriteByte(IntPtr, Int32, Byte)プラスのメモリのアンマネージ ブロックの開始アドレスによって定義されたメモリ アドレスへのバイトを書き込みますoffsetです。 これは、後デクリメントoffsetです。

    C# および C++ の例、コピー操作を実行アンマネージ ANSI 文字列の次の場所のアドレスへのポインターをデクリメントし、アンマネージ ブロック内の次のアドレスへのポインターをインクリメントします。

  5. すべての例を呼び出す、Marshal.PtrToStringAnsiマネージ Unicode にコピーされた ANSI 文字列を含む、アンマネージ メモリ ブロックを変換するStringオブジェクト。

  6. すべての例の呼び出し元と取り消された文字列を表示するには、後に、FreeHGlobalアンマネージ ANSI 文字列とメモリのアンマネージ ブロックに割り当てられたメモリを解放します。

using System;
using System.Runtime.InteropServices;

class NotTooSafeStringReverse
{
    static public void Main()
    {
        string stringA = "I seem to be turned around!";
        int copylen = stringA.Length;

        // Allocate HGlobal memory for source and destination strings
        IntPtr sptr = Marshal.StringToHGlobalAnsi(stringA);
        IntPtr dptr = Marshal.AllocHGlobal(copylen + 1);

        // The unsafe section where byte pointers are used.
        unsafe
        {
            byte *src = (byte *)sptr.ToPointer();
            byte *dst = (byte *)dptr.ToPointer();

            if (copylen > 0)
            {
                // set the source pointer to the end of the string
                // to do a reverse copy.
                src += copylen - 1;

                while (copylen-- > 0)
                {
                    *dst++ = *src--;
                }
                *dst = 0;
            }
        }
        string stringB = Marshal.PtrToStringAnsi(dptr);

        Console.WriteLine("Original:\n{0}\n", stringA);
        Console.WriteLine("Reversed:\n{0}", stringB);

        // Free HGlobal memory
        Marshal.FreeHGlobal(dptr);
        Marshal.FreeHGlobal(sptr);
    }
}

// The progam has the following output:
//
// Original:
// I seem to be turned around!
//
// Reversed:
// !dnuora denrut eb ot mees I

ユニバーサル Windows プラットフォーム
8 以降で使用可能
.NET Framework
1.1 以降で使用可能
ポータブル クラス ライブラリ
サポート対象: 移植可能 .NET プラットフォーム
Silverlight
2.0 以降で使用可能
Windows Phone Silverlight
7.0 以降で使用可能
Windows Phone
8.1 以降で使用可能

この型はスレッド セーフです。

トップに戻る
表示: