input600
長さ 600 の float 配列です。
IntPtr ip = Marshal.AllocHGlobal(Marshal.SizeOf(input600));
上記のステートメントは、次のエラーをスローします。
型 'System.Single[]' はアンマネージ構造としてマーシャリングできません。意味のあるサイズまたはオフセットを計算できません。
この発言の問題点は何ですか?
のドキュメントからMarshal.SizeOf(object)
:
このメソッドは、参照型またはボックス化された値型の構造体のインスタンスを受け入れます。レイアウトはシーケンシャルまたは明示的でなければなりません。
配列はこの要件を満たしていません。ただし、配列要素の型が必要なレイアウトを持つ構造体のプリミティブであると仮定すると、次のようにスペース要件を計算できるはずです。
IntPtr ip = Marshal.AllocHGlobal(Marshal.SizeOf(input600.GetType().GetElementType())*input600.Length);