在C ++ / CLI中将托管字符串列表复制到wchar_t数组

时间:2013-07-23 07:56:35

标签: string c++-cli

将托管字符串列表List<String^>^复制到wchar_t数组的最简单方法是什么?

所以来自List<String^>^ someList 我需要将它复制到一个新的数组,比如说:

wchar_t *paramList = new wchar_t[sizeoflist];

虽然我们谈论这个主题,但有人可以指出一个很好的C ++ / CLI参考书(书籍/在线文章)来解释这些方面吗?

1 个答案:

答案 0 :(得分:2)

不是询问有关问题的问题(请参阅@HanPassant和@ChristianRau的问题评论),这是一个让你想到你真正想要的东西:

#include <msclr/marshal_cppstd.h>
#include <string>
#include <vector>
using namespace System;
using namespace std;

// preserves UTF-16LE encoding
vector<wstring> StringArrayToNative(array<String ^>^ arr)
{
    vector<wstring> v;
    v.reserve(arr->Length);
    for each (String^ s in arr)
    {
        // copies from the CLR GC heap to the C++ heap.
        v.push_back(msclr::interop::marshal_as<wstring>(s));
    }
    return v;
}

wstring当然包含wchart_t个元素。 wchar_t旨在用于可移植代码,并且应该包含原生大小的字符。它被标准尺寸类型取代,因为毕竟字符编码是标准。遗憾的是,char16_t未内置于C ++ / CLI工具集中。尽管如此,在所有MSVC中,wchar_t的大小为2个字节,而在Windows上通常用于保存Unicode字符集的一个UTF-16LE代码单元。这使得它可以用于Win32 API。 (顺便说一句,微软称UTF-16LE为“Unicode”。)