I need to create a GUID
in an unmanaged windows C++ project. I\'m used to C#, where I\'d use Guid.NewGuid()
. What\'s the (unmanaged windows) C++ vers
To generate a new guid in windows and get the resulting value as a string.
#include
#include
#include
#include
#include
int main()
{
GUID guid;
CoCreateGuid(&guid);
std::ostringstream os;
os << std::hex << std::setw(8) << std::setfill('0') << guid.Data1;
os << '-';
os << std::hex << std::setw(4) << std::setfill('0') << guid.Data2;
os << '-';
os << std::hex << std::setw(4) << std::setfill('0') << guid.Data3;
os << '-';
os << std::hex << std::setw(2) << std::setfill('0') << static_cast(guid.Data4[0]);
os << std::hex << std::setw(2) << std::setfill('0') << static_cast(guid.Data4[1]);
os << '-';
os << std::hex << std::setw(2) << std::setfill('0') << static_cast(guid.Data4[2]);
os << std::hex << std::setw(2) << std::setfill('0') << static_cast(guid.Data4[3]);
os << std::hex << std::setw(2) << std::setfill('0') << static_cast(guid.Data4[4]);
os << std::hex << std::setw(2) << std::setfill('0') << static_cast(guid.Data4[5]);
os << std::hex << std::setw(2) << std::setfill('0') << static_cast(guid.Data4[6]);
os << std::hex << std::setw(2) << std::setfill('0') << static_cast(guid.Data4[7]);
std::string s(os.str());
std::cout << s << std::endl;
}
Alternatively, you could use sprintf_s
for the string conversion
GUID guid;
CoCreateGuid(&guid);
char guidStr[37];
sprintf_s(
guidStr,
"%08lX-%04hX-%04hX-%02hhX%02hhX-%02hhX%02hhX%02hhX%02hhX%02hhX%02hhX",
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);