What's the C++ version of Guid.NewGuid()?

前端 未结 7 1578
栀梦
栀梦 2021-01-31 14:04

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

7条回答
  •  我在风中等你
    2021-01-31 15:01

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

提交回复
热议问题