2010-03-02 4 views
1

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

Répondre

3

Le résultat de c_str() est détruit avec la chaîne result (lorsqu'il est hors de portée) .Vous devrez lui allouer explicitement de la mémoire.

+0

Ahh, honte sur moi -.- Une telle chose fondamentale ... Merci beaucoup pour votre aide; – Tronje182

+0

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

+0

C'est exactement la façon dont j'ai résolu le problème. Mais merci pour le conseil néanmoins. – Tronje182

0

Vous pouvez faire le type de retour pour stringToPCWSTR comme référence const à PCWSTR-à-dire const PCWSTR &

+0

Comment cela l'aiderait-il? – sharptooth

Questions connexes