Je suis vraiment nouveau à la programmation C++ et j'ai un problème avec l'écriture dans un document XML.chaîne à PCWSTR -> retour étrange (C++)
J'utilise un exemple légèrement modifié de sortie xml de 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
}
Je donne une chaîne à CreateAndAddTestMethodNode qui convertissent avec stringtopcwstr à un pcwstr, ou devrait le faire.
//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;
}
Mais il ne retourne que quelque chose comme « 0x00bb9908 « وووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووو » qui provoque une violation d'accès dans l'une des méthodes suivantes. Ce serait vraiment génial si quelqu'un pouvait me donner la moindre idée où je l'ai fait l'échec.
Merci
Ahh, honte sur moi -.- Une telle chose fondamentale ... Merci beaucoup pour votre aide; – Tronje182
Vous pouvez également renvoyer simplement le wstring à partir de stringToPCWSTR - et appeler .c_str() sur la valeur de retour de la fonction. Cela vous évitera de jouer avec l'allocation de mémoire. – AshleysBrain
C'est exactement la façon dont j'ai résolu le problème. Mais merci pour le conseil néanmoins. – Tronje182