将数组<string ^> ^转换为std :: vector <std :: string> </std :: string> </string ^>

时间:2014-08-01 03:46:46

标签: c++

如何将托管array<String^>^转换为std::vector<std::string>。以下代码没有编译,我无法弄清楚为什么。有趣的是,如果我使用int作为例子,那么它工作正常。提前谢谢:

std::vector<std::string> ConvertToUnManaged(array<String^>^ ar)
{
    using System::IntPtr;
    using System::Runtime::InteropServices::Marshal;

    std::vector<std::string> vector(ar->Length);
    Marshal::Copy(ar, 0, IntPtr(&vector[0]), ar->Length);

    return vector;
}

1 个答案:

答案 0 :(得分:3)

Marshall::Copy没有带有String参数数组的重载。

迭代数组元素并逐个转换。

#include <msclr/marshal_cppstd.h>

std::vector<std::string> ConvertToUnManaged(array<String^>^ ar)
{
    std::vector<std::string> vector(ar->Length);
    for (int i = 0; i < ar->Length; ++i) {
        auto s = ar[i];
        vector[i] = msclr::interop::marshal_as<std::string>(s);
    }
    return vector;
}