【问题标题】:Convert a List to an unmanaged array for C++/CLI将列表转换为 C++/CLI 的非托管数组
【发布时间】:2013-03-28 19:34:37
【问题描述】:

我正在为 C++/CLI 函数创建一个 .NET 包装类。该函数在内部使用整数数组 (int*),但我想在 .NET 端公开一个干净的List<int>^。我正在使用以下代码将 C# List 转换为 C++ 非托管 int 列表。

除了我没有使用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;
}

【问题讨论】:

    标签: c# .net list visual-c++ c++-cli


    【解决方案1】:

    您的代码是正确的。您分配了正确的内存量。而不是4,我会使用sizeof int,它更具表现力。

    我很想知道你为什么使用AllocHGlobal。我认为new 在 C++ 代码中更合适。我也想知道你为什么使用原始指针。 std::vector&lt;int&gt; 在 C++ 代码中不是更有意义吗?

    【讨论】:

      猜你喜欢
      • 2012-04-08
      • 1970-01-01
      • 2023-03-12
      • 1970-01-01
      • 1970-01-01
      • 2011-10-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多