ResultBuffer タイプは、ObjectARX SDK で定義された resbuf 構造体をミラーリングするクラスです。resbuf 構造体は、AutoCAD 固有のデータのために柔軟なコンテナを提供します。
Autodesk.AutoCAD.DatabaseServices.ResultBuffer クラス オブジェクトは、resbuf チェーンとほぼ同じように使用されます。ResultBuffer を定義し、これに一連のデータ ペアを入力します。各ペアには、データ タイプの記述と値を含めます。マネージ API では、これらのデータ ペアは Autodesk.AutoCAD.DatabaseServices.TypedValue クラスのインスタンスです。このユーティリティ クラスは、resbuf 構造体の restype メンバーと resval メンバーと同じ目的で機能します。
TypedValue.TypeCode プロパティは、TypedValue.Value プロパティのデータ タイプを示す 16 ビットの整数値です。受け入れ可能な TypeCode 値は、ResultBuffer インスタンスの具体的な用途によって変わります。たとえば、拡張レコード(xrecord)に適した TypeCode 値が、拡張データ(xdata)に適しているとは限りません。Autodesk.AutoCAD.DatabaseServices.DxfCode 列挙型は、可能な ResultBuffer データ タイプの全範囲を正確に記述するコードを定義します。
TypedValue.Value プロパティは、System.Object のインスタンスにマッピングし、理論的にはいずれのデータ タイプも含むことができます。ただし、使用可能な結果となるようにするためには、Value データは TypeCode によって指定されたタイプである必要があります。
ResultBuffer には、TypedValue オブジェクトの配列をそのコンストラクタに渡すことで入力できます。または、空の ResultBuffer を作成し、後から ResultBuffer::Add() メソッドを呼び出して新しい TypedValue オブジェクトを追加することもできます。次の例で、典型的な ResultBuffer コンストラクタの使い方を示します。
Using rec As New Xrecord() rec.Data = New ResultBuffer( _ New TypedValue(CInt(DxfCode.Text), "This is a test"), _ New TypedValue(CInt(DxfCode.Int8), 0), _ New TypedValue(CInt(DxfCode.Int16), 1), _ New TypedValue(CInt(DxfCode.Int32), 2), _ New TypedValue(CInt(DxfCode.HardPointerId), db.BlockTableId), _ New TypedValue(CInt(DxfCode.BinaryChunk), New Byte(){0, 1, 2, 3, 4}), _ New TypedValue(CInt(DxfCode.ArbitraryHandle), db.BlockTableId.Handle), _ New TypedValue(CInt(DxfCode.UcsOrg), New Point3d(0, 0, 0))) End Using
using (Xrecord rec = new Xrecord()) { rec.Data = new ResultBuffer( new TypedValue(Convert.ToInt32(DxfCode.Text), "This is a test"), new TypedValue(Convert.ToInt32(DxfCode.Int8), 0), new TypedValue(Convert.ToInt32(DxfCode.Int16), 1), new TypedValue(Convert.ToInt32(DxfCode.Int32), 2), new TypedValue(Convert.ToInt32(DxfCode.HardPointerId), db.BlockTableId), new TypedValue(Convert.ToInt32(DxfCode.BinaryChunk), new byte[] {0, 1, 2, 3, 4}), new TypedValue(Convert.ToInt32(DxfCode.ArbitraryHandle), db.BlockTableId.Handle), new TypedValue(Convert.ToInt32(DxfCode.UcsOrg), new Point3d(0, 0, 0))); }