Blittable 型と非 Blittable 型Blittable and Non-Blittable Types

ほとんどのデータ型の表現はマネージ メモリとアンマネージ メモリの両方で共通しているため、相互運用マーシャラーによる特別な処理は必要ありません。Most data types have a common representation in both managed and unmanaged memory and do not require special handling by the interop marshaler. これらの型は、マネージ コードとアンマネージ コード間での受け渡しの際に変換が必要でないため、blittable 型と呼ばれます。These types are called blittable types because they do not require conversion when they are passed between managed and unmanaged code.

プラットフォーム呼び出しから返される構造体は blittable 型である必要があります。Structures that are returned from platform invoke calls must be blittable types. プラットフォーム呼び出しでは、戻り値の型として非 blittable 型の構造体はサポートされません。Platform invoke does not support non-blittable structures as return types.

System 名前空間に属する次の型は blittable 型です。The following types from the System namespace are blittable types:

次の複合型も blittable 型です。The following complex types are also blittable types:

  • 整数の配列など、blittable 型の 1 次元配列。One-dimensional arrays of blittable types, such as an array of integers. ただし、blittable 型の可変配列を含む型自体は blittable ではありません。However, a type that contains a variable array of blittable types is not itself blittable.

  • blittable 型だけを含む、書式設定された値型 (および、それらが書式設定された型としてマーシャリングされる場合はクラス)。Formatted value types that contain only blittable types (and classes if they are marshaled as formatted types). 書式設定された値型の詳細については、「Default Marshaling for Value Types」(値型に対する既定のマーシャリング) を参照してください。For more information about formatted value types, see Default Marshaling for Value Types.

オブジェクト参照は blittable ではありません。Object references are not blittable. これには、単独では blittable なオブジェクトへの参照の配列も含まれます。This includes an array of references to objects that are blittable by themselves. たとえば、blittable な構造体は定義できますが、それらの構造体への参照の配列を含む blittable 型は定義できません。For example, you can define a structure that is blittable, but you cannot define a blittable type that contains an array of references to those structures.

blittable 型の配列と、blittable 型のメンバーだけを含むクラスは、最適化のために、マーシャリング時にコピーされるのではなく固定されます。As an optimization, arrays of blittable types and classes that contain only blittable members are pinned instead of copied during marshaling. これらの型は、呼び出し元と呼び出し先が同じアパートメントに属する場合には、In/Out パラメーターとしてマーシャリングされるように見えることがあります。These types can appear to be marshaled as In/Out parameters when the caller and callee are in the same apartment. ただし、そのような型は実際には In パラメーターとしてマーシャリングされるため、引数を In/Out パラメーターとしてマーシャリングする必要がある場合には、InAttribute 属性と OutAttribute 属性を適用する必要があります。However, these types are actually marshaled as In parameters, and you must apply the InAttribute and OutAttribute attributes if you want to marshal the argument as an In/Out parameter.

一部のマネージ データ型は、アンマネージ環境では異なる表現が必要です。Some managed data types require a different representation in an unmanaged environment. これらの非 blittable データ型は、マーシャリングできる形式に変換する必要があります。These non-blittable data types must be converted into a form that can be marshaled. たとえば、マネージ文字列は、文字列オブジェクトに変換しないとマーシャリングできないので、非 blittable 型です。For example, managed strings are non-blittable types because they must be converted into string objects before they can be marshaled.

System 名前空間に属する非 blittable 型を次の表に示します。The following table lists non-blittable types from the System namespace. デリゲートは静的メソッドまたはクラス インスタンスを参照するデータ構造体であり、これも非 blittable 型です。Delegates, which are data structures that refer to a static method or to a class instance, are also non-blittable.

非 blittable 型Non-blittable type 説明Description
System.ArraySystem.Array C スタイルの配列または SAFEARRAY に変換されます。Converts to a C-style array or a SAFEARRAY.
System.BooleanSystem.Boolean 1、2、または 4 バイトの値に変換されます。true の場合は 1 または -1 になります。Converts to a 1, 2, or 4-byte value with true as 1 or -1.
System.CharSystem.Char Unicode 文字または ANSI 文字に変換されます。Converts to a Unicode or ANSI character.
System.ClassSystem.Class クラス インターフェイスに変換されます。Converts to a class interface.
System.ObjectSystem.Object バリアントまたはインターフェイスに変換されます。Converts to a variant or an interface.
System.MdarraySystem.Mdarray C スタイルの配列または SAFEARRAY に変換されます。Converts to a C-style array or a SAFEARRAY.
System.StringSystem.String null 参照で終わる文字列または BSTR に変換されます。Converts to a string terminating in a null reference or to a BSTR.
System.ValuetypeSystem.Valuetype 固定メモリ レイアウトを持つ構造体に変換されます。Converts to a structure with a fixed memory layout.
System.SzarraySystem.Szarray C スタイルの配列または SAFEARRAY に変換されます。Converts to a C-style array or a SAFEARRAY.

クラス型とオブジェクト型は COM 相互運用でのみサポートされます。Class and object types are supported only by COM interop. Visual Basic 2005Visual Basic 2005、C#、および C++ の対応する型については、「クラス ライブラリの概要」を参照してください。For corresponding types in Visual Basic 2005Visual Basic 2005, C#, and C++, see the Class Library Overview.

参照See Also

既定のマーシャリング動作Default Marshaling Behavior