2013-03-24 8 views
5

アンマネージドメモリにIntPtr []の配列を割り当てる方法は?私が使用するマネージコードでメモリを割り当てる

IntPtr [] params_list_n = new IntPtr [5]; 

しかし、アンマネージメモリのために私はMarshal.AllocHGlobal を使用して、私はこのケースで配列にメモリを割り当てる方法を、理解していません。

理想的には、関数呼び出しを使用したいMarshal.GetNativeVariantForObject (o, params_list_n[i]); 配列の各要素について。

答えて

6

は簡単です。

IntPtr pointer = Marshal.AllocHGlobal(1024); 

スペースの量を計算する必要がある場合は、Marshal.SizeOfを使用できます。

int size = Marshal.SizeOf(typeof(IntPtr)); 
IntPtr pointer = Marshal.AllocHGlobal(size); 

これを実行するには、プロジェクトでunsafe codeも有効にする必要があります。

  1. プロジェクトを右クリックし、Propertiesを選択します。
  2. Buildタブを開きます。
  3. Allow unsafe codeを選択します。
+0

ありがとうございます。メモリを非管理対象から非管理対象にコピーする方法を詳しく教えてください。 マーシャル。この目的には適していません。私が理解するように – Mixer

2

配列は要素へのポインタになります。あなたはそれを同じように使用します。Marshal.AllocHGlobalを使用してアンマネージメモリの作成

IntPtr results = Marshal.AllocHGlobal(5 * IntPtr.Size); 
+1

* sizeof *はIntPtrで動作しません! – Mixer

+1

@Mixer fixed - 申し訳ありませんが、早く行きました –

+1

'IntPtr.Size'について私は忘れました。名声。 :) – eandersson

関連する問題