2011-07-13 118 views
2

下面是我嘗試過的那個,但沒有奏效。如何將wstring轉換爲LPOLESTR?

std::wstring = L"Text"; 
USES_CONVERSION; 
LPOLESTR lpDesc = W2OLE((LPWSTR)wsDescr.c_str()); 

請任何一個cany說什麼是更好的方法?

+0

剛注意到,但std :: wstring = L 「文本」;無效。變量名稱在哪裏? – 2011-07-13 17:17:23

回答

1

你不需要轉換可言,只是複製字符串:

std::wstring str = L"Text"; 
LPOLESTR lpDesc = (LPOLESTR) new wchar_t[str.length() + 1]; 
strcpy(lpDesc, str.c_str()); 
delete[] lpDesc; 
+0

錯誤C2440:'=':無法從'const wchar_t *'轉換爲'LPOLESTR' – Naveen

+0

錯誤C2440:'=':無法從'const wchar_t *'轉換爲'LPOLESTR'...我在執行此錯誤時所以 – Naveen

+0

@Naveen:立即嘗試。 – orlp

7

LPOLESTROLECHAR一個字符串,它本質上是wchar_t。所以LPOLESTR是一個空終止的wchar_t*LPOLESTR是由Microsoft創建的typedef。這些是微軟在MFC 4.0之前使用的自動ANSI/Unicode轉換方案的遺留問題,此後已被放棄。對於Win32開發,「OLE」對應於Unicode。例如,在Win32開發中,OLECHAR只是一個wchar_tLPOLESTR是寬字符串(例如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()); 
+0

LPOLESTR是一個'wchar_t *',而不是'const wchar_t *',所以'pwstr = wstr.c_str()'是非法的,沒有強制轉換,但是這引發了一些不舒服的問題:如果它不是const,那麼它安全地做到這一點? –