下面是我嘗試過的那個,但沒有奏效。如何將wstring轉換爲LPOLESTR?
std::wstring = L"Text";
USES_CONVERSION;
LPOLESTR lpDesc = W2OLE((LPWSTR)wsDescr.c_str());
請任何一個cany說什麼是更好的方法?
下面是我嘗試過的那個,但沒有奏效。如何將wstring轉換爲LPOLESTR?
std::wstring = L"Text";
USES_CONVERSION;
LPOLESTR lpDesc = W2OLE((LPWSTR)wsDescr.c_str());
請任何一個cany說什麼是更好的方法?
你不需要轉換可言,只是複製字符串:
std::wstring str = L"Text";
LPOLESTR lpDesc = (LPOLESTR) new wchar_t[str.length() + 1];
strcpy(lpDesc, str.c_str());
delete[] lpDesc;
LPOLESTR
是OLECHAR
一個字符串,它本質上是wchar_t
。所以LPOLESTR
是一個空終止的wchar_t*
。 LPOLESTR
是由Microsoft創建的typedef
。這些是微軟在MFC 4.0之前使用的自動ANSI/Unicode轉換方案的遺留問題,此後已被放棄。對於Win32開發,「OLE」對應於Unicode。例如,在Win32開發中,OLECHAR
只是一個wchar_t
而LPOLESTR
是寬字符串(例如wchar_t*
)。
爲了從wchar_t
字符數組構造wstring
它是直線前進 -
wchar_t* Array = L"Hello";
std::wstring strArray(Array);
其他方向wstring的到wchar_t的*轉換,你可以做到這一點 -
wstring wstr = L"Test wstring";
const wchar_t *pwstr = wstr.c_str();
可以也試試這個,
LPOLESTR tempString = W2OLE((wchar_t*)wstring_temp.c_str());
LPOLESTR是一個'wchar_t *',而不是'const wchar_t *',所以'pwstr = wstr.c_str()'是非法的,沒有強制轉換,但是這引發了一些不舒服的問題:如果它不是const,那麼它安全地做到這一點? –
剛注意到,但std :: wstring = L 「文本」;無效。變量名稱在哪裏? – 2011-07-13 17:17:23