我是C ++的新手 - 编程,我在写入xml文档时遇到了问题。
我正在使用msdn(http://msdn.microsoft.com/en-us/library/ms766497(VS.85).aspx)稍微更改的xml输出示例。
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‘وووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووو’,这会导致访问冲突中的下一个方法之一。 如果有人可以告诉我哪里发生了失败,那将是非常好的。
谢谢。
答案 0 :(得分:3)
c_str()
的结果与result
字符串一起被销毁(当它超出范围时)。您需要为它显式分配内存。
答案 1 :(得分:0)
你可以将stringToPCWSTR的返回类型作为对PCWSTR的const引用,即const PCWSTR&