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 型 | 説明 |
---|---|
C スタイルの配列または SAFEARRAY に変換されます。 |
|
1、2、または 4 バイトの値に変換されます。true の場合は 1、それ以外の場合は -1 になります。 |
|
Unicode 文字または ANSI 文字に変換されます。 |
|
クラス インターフェイスに変換されます。 |
|
バリアントまたはインターフェイスに変換されます。 |
|
C スタイルの配列または SAFEARRAY に変換されます。 |
|
null 参照 (Visual Basic では Nothing) で終わる文字列または BSTR に変換されます。 |
|
固定メモリ レイアウトを持つ構造体に変換されます。 |
|
C スタイルの配列または SAFEARRAY に変換されます。 |
クラス型とオブジェクト型は COM 相互運用機能によってだけサポートされます。Visual Basic 2005、C#、および C++ の対応する型については、「.NET Framework クラス ライブラリの概要」を参照してください。