アンマネージDLLライブラリと連携するマネージプログラムがあります。
ライブラリはオブジェクトを構築します。オブジェクトは、(コールバック関数によってデリゲートに変換されて)管理対象ホストに管理対象外の配列を埋めるように要求します。配列自体は、そのサイズに関する情報とともにポインター(IntPtr)を介して渡されます。タイプは両側に知られています。重要なのは、マネージコードのデータでアンマネージ配列を安全に埋めるにはどうすればよいのでしょうか。2つの制限が適用されます。安全でないコードがないことと、できれば追加の配列が作成されないことです。そのようなものが存在する場合、配列は別の方法で渡される可能性があります。
コールバックに次のプロトタイプを持たせます。
typedef void (__stdcall * FillData)(double * array, int count);
デリゲートに次のプロトタイプを持たせます。
protected delegate void FillData(IntPtr array, int count);