2010-03-02 58 views
1

我真的很新C++ - 編程和我有一個寫入XML文檔的問題。字符串到PCWSTR - >奇怪的回報(C++)

我使用msdn(http://msdn.microsoft.com/en-us/library/ms766497(VS.85).aspx)的xml outputter的稍微更改的示例。

HRESULT CreateAndAddTestMethodNode(string name) 
{ 
HRESULT hr = S_OK; 
IXMLDOMElement* pElement = NULL; 

CHK_HR(CreateAndAddElementNode(pXMLDom, L"method", L"\n\t", pClass, &pMethod)); 
CHK_HR(CreateAndAddAttributeNode(pXMLDom, L"name", stringToPCWSTR(name), pMethod)); 
    //more Attribute Nodes (deleted for better overview ;)) 
CleanUp: 
SAFE_RELEASE(pMethod); 

return hr 
} 

我給一個字符串CreateAndAddTestMethodNode與stringtopcwstr將其轉換爲一個PCWSTR,或者應該這樣做。

//convert string to pcwstr 
PCWSTR stringToPCWSTR (const std::string& str) 
{ 
int len; 
int slength = (int)str.length() + 1; 
len = MultiByteToWideChar(CP_ACP, 0, str.c_str(), slength, 0, 0); 
wchar_t* buf = new wchar_t[len]; 
MultiByteToWideChar(CP_ACP, 0, str.c_str(), slength, buf, len); 
std::wstring result(buf); 
delete[] buf; 
PCWSTR pResult = result.c_str(); 
return pResult; 
} 

但它只返回類似 「0x00bb9908‘وووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووو’,這會導致訪問衝突中的下一個方法之一。 這將是非常巨大的,如果有人能夠給我線索,在那裏我做了失敗。

謝謝。

回答

3

c_str()的結果與result字符串一起被破壞(當它超出範圍時),您將需要爲它明確分配內存。

+0

啊,可恥的是我-.- 這樣一個基本的東西... 非常感謝你的幫助; ) – Tronje182

+0

您也可以直接從stringToPCWSTR返回wstring本身 - 並在函數的返回值上調用.c_str()。這將節省您的內存分配擺弄。 – AshleysBrain

+0

這正是我解決問題的方法。不過謝謝你的提示。 – Tronje182

0

你可以做的stringToPCWSTR返回類型爲常量引用PCWSTR即常量PCWSTR &

+0

它會如何幫助他? – sharptooth