將託管字符串列表List<String^>^
複製到wchar_t
s數組的最簡單方法是什麼?將託管字符串列表複製到C++/CLI中的wchar_t數組中
所以從List<String^>^ someList
我需要把它複製到一個新的數組,說:
wchar_t *paramList = new wchar_t[sizeoflist];
雖然我們對這個話題,可有人點了良好的C++/CLI參考(書/網上文章)解釋這些方面?
將託管字符串列表List<String^>^
複製到wchar_t
s數組的最簡單方法是什麼?將託管字符串列表複製到C++/CLI中的wchar_t數組中
所以從List<String^>^ someList
我需要把它複製到一個新的數組,說:
wchar_t *paramList = new wchar_t[sizeoflist];
雖然我們對這個話題,可有人點了良好的C++/CLI參考(書/網上文章)解釋這些方面?
而不是詢問有關問題的問題(參見問題從@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」)。
爲我工作,只是可以通過檢查是否不是nullptr – Karlas
一次一個。關於一個字符串已經有很多問題了。只要看看這個頁面右邊的相關欄。 –
你確定你需要_TCHAR嗎? –
@TomBlodget:wchar_t會做。我已經更新了這個問題。 – bobbyalex