2017-05-09 4 views
1

Je suis nouveau en C++ pour un seul projet.Les résultats de la conversion Uuid en lettres chinoises

C++ est nécessaire pour un plugin et ici je dois créer un UUID. C'est presque la seule chose dont j'avais besoin pour créer le plugin.

Ma conversion de guid en str donne des lettres chinoises. Le gros problème est qu'il n'y a pas d'option pour déboguer le plugin.

UUID guid; 
CoCreateGuid(&guid); 

char guidStr[40]; 
sprintf_s(
    guidStr, 
    "%08X-%04hX-%04hX-%02X%02X-%02X%02X%02X%02X%02X%02X", 
    guid.Data1, guid.Data2, guid.Data3, 
    guid.Data4[0], guid.Data4[1], guid.Data4[2], guid.Data4[3], 
    guid.Data4[4], guid.Data4[5], guid.Data4[6], guid.Data4[7]); 
std::string s(guidStr); 

pUID->szFieldValue.Set(LPCTSTR(guidStr)); 

Lorsque je mets une chaîne à la place de cet uuid, la chaîne semble normale.

Display Sample with the problem

+0

Jetez un coup d'oeil [ici] (http://stackoverflow.com/questions/3452272/convert-boostuuid-to-char) peut être cela pourrait vous aider. – Zelnes

Répondre

0

Vous jettes mal guidStr qui est un tableau de char à LPCTSTR qui est un pointeur vers wchar_t si vous compilez pour Unicode.

utiliser le tableau wchar_t et larges versions des fonctions, de sorte que vous pouvez supprimer le casting:

UUID guid; 
CoCreateGuid(&guid); 
wchar_t guidStr[40]; 
swprintf_s(
    guidStr, 
    L"%08X-%04hX-%04hX-%02X%02X-%02X%02X%02X%02X%02X%02X", 
    guid.Data1, guid.Data2, guid.Data3, 
    guid.Data4[0], guid.Data4[1], guid.Data4[2], guid.Data4[3], 
    guid.Data4[4], guid.Data4[5], guid.Data4[6], guid.Data4[7]); 
std::wstring s(guidStr); 


pUID->szFieldValue.Set(guidStr); 

Vous pouvez également utiliser StringFromCLSID() pour convertir en chaîne.