次のC++コードをCシャープにする必要があります。 C++からC#マーシャリング
int* pData = new int[128];
for(int i = 0; i < 128; i++)
{ pData[i] = i*2 ;}
このpDataをのint *
は後で今、私はC#でこのすべてを配置する必要があり
* voidとして関数に渡されます。保護されたメモリを読み書きしようとしました:次のように私がやったことはInt32[] tempData = new Int32[128];
for(int i = 0; i < 128; i++)
{ tempData[i] = i*2 ;}
int size = Marshal.SizeOf(tempData[0]) * tempData.Length;
IntPtr ptrData = Marshal.AllocHGlobal(size);
Marshal.Copy(tempData, 0, ptrData, tempData.Length);
後、私は、私は、実行時エラーを取得するC#のfunction.ButにptrDataを渡し、です。これはしばしば、他のメモリが壊れていることを示します。
ありがとうございました。トリックを行う必要があります
は、のPInvokeのマーシャラーは、すでにこれを行います。バグはこのコードではない、私は[DllImport]宣言が悪いと思います。そのネイティブコードでは、AVで多くのヘルプを爆破する必要はありません。デバッガを使用し、アンマネージコードのデバッグを有効にします。 –
マーシャルコピーの長さは間違いなく短すぎます。長さは配列のサイズですが、intのサイズで乗算する必要があります。 – weismat
マーシャルのトリックが 'int * pData = new int [128];'と 'int pData [128];'のままであれば少しチェックする必要がありますか? – control