2017-06-18 36 views
-3

我试图通过hwProfileInfo类获得HWID,但它返回我,我不能将WCHAR [39]转换为字符串。如何获得HWID

string getHWID(){ 
    string hardware_guid 

    HW_PROFILE_INFO hwProfileInfo; 
    GetCurrentHwProfile(&hwProfileInfo); 
    hardware_guid = hwProfileInfo.szHwProfileGuid; 

    return hardware_guid; 
} 

比我尝试过这种方式,但它返回我只是“{”

hardware_guid = (char*)hwProfileInfo.szHwProfileGuid; 

我知道有在谷歌的一些更多的方式,但我没有找到任何工作的变种。可能有些人会说100%的方法吗?

+3

你知道什么是'WCHAR [39]'和'string'之间的区别? – VTT

+0

你需要使用'std :: wstring'。 –

+1

我假设'string'的意思是'std :: string'。 'std :: string'使用'char's,而'WCHAR'是'wchar_t'的Windows别名。你有几个选择:(1)将'string'改为'wstring',或者(2)将Unicode编码的'WCHAR [39]'转换为'std :: string'。如果您使用C++ 11或更高版本,你可能想看看'的std :: wstring_convert'(http://en.cppreference.com/w/cpp/locale/wstring_convert)。由于您使用的是Windows,你可以使用'WideCharToMultiByte'(https://msdn.microsoft.com/en-us/library/windows/desktop/dd374130.aspx),但可能会非常棘手。 –

回答

-3

这是回答我的问题。

string getHWID(){ 
    HW_PROFILE_INFO hwProfileInfo; 
    GetCurrentHwProfile(&hwProfileInfo); 
    wstring hwidWString = hwProfileInfo.szHwProfileGuid; 
    string hwid(hwidWString.begin(), hwidWString.end()); 

    return hwid; 
} 
+2

这绝对不是你问题的答案。不能使用迭代器将'std :: wstring'对象转换为'std :: string'对象。它们是完全不同的类型。迭代器甚至不应该兼容。 –

+0

@Cody灰色笑但无论如何,它的工作原理,这让我HWID,我想 –

+0

这样{e29ac6c0-7037-11de-816d-806e6f6e6963} –

0

有两种方法: 月1日,您可以使用std :: wstring的,它使用的wchar_t,而不是的std :: string,它采用字符。 第二你可以使用GetCurrentHwProfileA代替GetCurrentHwProfileW,如果UNICODE被定义将被定义为GetCurrentHwProfile。