строка в PCWSTR -> странный возврат (C ++) - PullRequest
1 голос
/ 02 марта 2010

Я действительно новичок в C ++ - программировании, и у меня возникла проблема с записью в XML-документ.

Я использую слегка измененный пример xml outputter из msdn (http://msdn.microsoft.com/en-us/library/ms766497(VS.85).aspx).

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" ﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮ ", что вызывает нарушение прав доступа в одном из следующих методов. Было бы здорово, если бы кто-нибудь мог дать мне подсказку, где я совершил ошибку.

Спасибо.

Ответы [ 2 ]

3 голосов
/ 02 марта 2010

Результат c_str() уничтожается вместе со строкой result (когда он выходит из области видимости). Вам нужно будет явно выделить память для этого.

0 голосов
/ 02 марта 2010

Вы можете сделать тип возвращаемого значения для stringToPCWSTR как постоянную ссылку на PCWSTR, то есть const PCWSTR &

...