如何将托管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;
}
答案 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;
}