C++/CLI 関数への .NET ラッパー クラスを作成しています。関数は内部的に int の配列 ( ) を使用しますが、.NET 側int*
でクリーンを公開したいと考えています。List<int>^
次のコードを使用して、C# List を int の C++ アンマネージ リストに変換しています。
を使用して割り当てられたメモリを解放していないという事実とは別にMarshal::FreeHGlobal
、関数に問題はありますか? たとえば((count * 4) + 4)
、配列の長さのバイトを割り当てる必要がありますか?
static int* ListToArray(List<int>^ list){
// new array
int count = list->Count;
int* arr = (int*)(Marshal::AllocHGlobal(count * 4).ToPointer());
// convert list to array
for(int a = 0; a < count; a++){
arr[a] = list[a];
}
return arr;
}