2017-05-09 111 views
1

我是新来的C++只有一个项目。中文字母Uuid转换结果

插件需要C++,在这里我必须创建一个UUID。这几乎是我需要为其创建插件的唯一方法。

我从guid转换到str导致中英文字母。 大问题是,没有选项来调试插件。

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)); 

当我把一个字符串,而不是这个uuid,字符串看起来很正常。

Display Sample with the problem

+0

看看[这里](http://stackoverflow.com/questions/3452272/convert-boostuuid-to-char)可能是它可以帮助你。 – Zelnes

回答

0

你被错误地铸造guidStr这是charLPCTSTR数组,它是一个指向wchar_t,如果编译的Unicode。功能

使用wchar_t阵列和广泛的版本,这样可以去掉演员:

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); 

或者,使用StringFromCLSID()转换为字符串。