2013-07-23 51 views
0

將託管字符串列表List<String^>^複製到wchar_t s數組的最簡單方法是什麼?將託管字符串列表複製到C++/CLI中的wchar_t數組中

所以從List<String^>^ someList 我需要把它複製到一個新的數組,說:

wchar_t *paramList = new wchar_t[sizeoflist]; 

雖然我們對這個話題,可有人點了良好的C++/CLI參考(書/網上文章)解釋這些方面?

+2

一次一個。關於一個字符串已經有很多問題了。只要看看這個頁面右邊的相關欄。 –

+0

你確定你需要_TCHAR嗎? –

+0

@TomBlodget:wchar_t會做。我已經更新了這個問題。 – bobbyalex

回答

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的東西。 (BTW-微軟稱爲UTF-16LE,簡稱「Unicode」)。

+0

爲我工作,只是可以通過檢查是否不是nullptr – Karlas

相關問題