如何从托管数组 <String^>^ 中获取 char * arr[]?

How to get a char * arr[] from a managed array<String^>^?

我有点困惑如何获得 array<String^>^char * Bar[]

我的非托管函数看起来有点像这样:

void NativeClass::Foo(char * Bar[])
{
    SomeAPIFunction(Bar);
}

托管部分(应该只给出我想要实现的目标的想法):

void ManagedClass::Foo(array<String^>^ Bar)
{
    NativeClass * MyNativeClass = new NativeClass();
    MyNativeClass->Foo(Bar);
}

有实用方法可以为您转换单个字符串,但对于数组,您需要自己完成。

这就是我要做的:首先,转换为 C++ 类,因为它们很方便并且可以处理您需要处理的大部分内存分配。然后,创建 char*[] 以指向 C++ 对象。

void ManagedClass::Foo(array<String^>^ managedArray)
{
    std::vector<std::string> vec;
    for each (String^ managedStr in managedArray)
        vec.push_back(marshal_as<std::string>(managedStr));

    char** unmanagedArray = new char*[vec.size()];
    for (size_t i = 0; i < vec.size(); i++)
        unmanagedArray[i] = vec[i].c_str();

    NativeClass * MyNativeClass = new NativeClass();
    MyNativeClass->Foo(unmanagedArray);

    delete[] unmanagedArray;
}

免责声明:我目前不在编译器中,可能存在轻微的语法错误。