次の方法で共有


Blittable 型と非 Blittable 型

多くのデータ型の場合、マネージ メモリでもアンマネージ メモリでもその表現は共通するため、相互運用マーシャラによる特別な処理は必要ありません。これらの型は、マネージ コードとアンマネージ コード間で受け渡しするときに変換する必要がないため、blittable 型と呼ばれます。

System 名前空間に属する次の型は blittable 型です。

次の複合型も blittable 型です。

  • 整数の配列など、blittable 型の 1 次元配列。ただし、blittable 型の可変配列を含む型自体は blittable ではありません。

  • blittable 型だけを含む、書式指定された値型 (それらが書式指定された型としてマーシャリングされる場合)。

オブジェクト参照は blittable ではありません。これには、単独では blittable なオブジェクトへの参照の配列も含まれます。たとえば、blittable な構造体は定義できますが、それらの構造体への参照の配列を含む blittable 型は定義できません。

blittable 型の配列と、blittable 型のメンバだけを含むクラスは、最適化のために、マーシャリング時にコピーされるのではなく固定されます。これらの型は、呼び出し元と呼び出し先が同じアパートメントに属する場合には、In/Out パラメータとしてマーシャリングされるように見えることがあります。ただし、そのような型は実際には In パラメータとしてマーシャリングされるため、引数を In/Out パラメータとしてマーシャリングする必要がある場合には、InAttribute 属性と OutAttribute 属性を適用する必要があります。

非 blittable 型は、マネージ言語とアンマネージ言語では異なる表現またはあいまいな表現を持ちます。これらの型をマネージ コードとアンマネージ コードの間でマーシャリングするときには変換する必要が生じることがあります。たとえば、マネージ文字列は、いくつかの異なるアンマネージ表現を持つ場合があり、その表現のいくつかは変換を必要とする場合があるため、非 blittable 型です。

System 名前空間に属する非 blittable 型を次の表に示します。デリゲートは静的メソッドまたはクラス インスタンスを参照するデータ構造体ですが、これも非 blittable 型です。

非 blittable 型 説明

System.Array

C スタイルの配列または SAFEARRAY に変換されます。

System.Boolean

1、2、または 4 バイトの値に変換されます。true の場合は 1、それ以外の場合は -1 になります。

System.Char

Unicode 文字または ANSI 文字に変換されます。

System.Class

クラス インターフェイスに変換されます。

System.Object

バリアントまたはインターフェイスに変換されます。

System.Mdarray

C スタイルの配列または SAFEARRAY に変換されます。

System.String

null 参照 (Visual Basic では Nothing) で終わる文字列または BSTR に変換されます。

System.Valuetype

固定メモリ レイアウトを持つ構造体に変換されます。

System.Szarray

C スタイルの配列または SAFEARRAY に変換されます。

クラス型とオブジェクト型は COM 相互運用機能によってだけサポートされます。Visual Basic 2005、C#、および C++ の対応する型については、「.NET Framework クラス ライブラリの概要」を参照してください。

参照

その他の技術情報

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