C# 将列表转换为C++/CLI
我正在为C++/CLI函数创建一个.NET包装器类。函数内部使用一个int数组(C# 将列表转换为C++/CLI,c#,.net,list,visual-c++,c++-cli,C#,.net,List,Visual C++,C++ Cli,我正在为C++/CLI函数创建一个.NET包装器类。函数内部使用一个int数组(int*),但我想在.NET端公开一个干净的List^。我使用下面的代码将C++列表转换为int(/p>>)的C++非托管列表。 除了我没有使用Marshal::FreeHGlobal释放分配的内存之外,这个函数还有什么问题吗?例如,我应该为数组长度字节分配((count*4)+4) static int* ListToArray(List<int>^ list){ // new array
int*
),但我想在.NET端公开一个干净的List^
。我使用下面的代码将C++列表转换为int(/p>>)的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;
}
static int*ListToArray(List^List){
//新阵列
int count=列表->计数;
int*arr=(int*)(Marshal::AllocHGlobal(count*4.ToPointer());
//将列表转换为数组
对于(int a=0;a
您的代码是正确的。您分配了正确的内存量。我不使用4
而是使用sizeof int
,它更具表现力
我真想知道你为什么要使用AllocHGlobal
。我认为<代码>新< /代码>在C++代码中更合适。我还想知道你为什么使用原始指针。<代码> STD::向量<代码>在C++代码中更具意义?