10

I need to be able to create guids on the fly. Is there a way to do that in MFC? I see how to do it in .net, but we haven't gone there yet. If not, do you have pointers to some code I can use?

JonDrnek
  • 1,414
  • 3
  • 19
  • 37

5 Answers5

13
   //don't forget to add Rpcrt4.lib to your project

    CString m_ListID(L"error");
    RPC_WSTR guidStr;
    GUID guid;
    HRESULT hr = CoCreateGuid(&guid);
    if (hr == S_OK)
    {
        if(UuidToString(&guid, &guidStr) == RPC_S_OK)
        {
            m_ListID = (LPTSTR)guidStr;
            RpcStringFree(&guidStr);
        }
    }
wpqs
  • 131
  • 1
  • 3
12
GUID guid;
HRESULT hr = CoCreateGuid(&guid); 

// Convert the GUID to a string
_TUCHAR * guidStr;
UuidToString(&guid, &guidStr);

The application is responsible for calling RpcStringFree to deallocate the memory allocated for the string returned in the StringUuid parameter.

Mitch Wheat
  • 295,962
  • 43
  • 465
  • 541
6

You can use the COM function CoCreateGuid, e.g.:

GUID guid;
HRESULT hr = CoCreateGuid(&guid);
John Sibly
  • 22,782
  • 7
  • 63
  • 80
5

Use the function UuidCreate to generate GUIDs :

UUID generated;

if (::UuidCreate(&generated) != RPC_S_OK)
throw std::exception(...);
Edouard A.
  • 6,100
  • 26
  • 31
2

You can use this sample

WCHAR       GuidText[250] ={0};
UUID        uuid;

CoCreateGuid (&uuid);
wsprintf(
        GuidText,
        L"%08X-%04X-%04X-%02X%02X-%02X%02X%02X%02X%02X%02X",
        uuid.Data1,
        uuid.Data2,
        uuid.Data3,
        uuid.Data4[0], uuid.Data4[1],
        uuid.Data4[2], uuid.Data4[3], uuid.Data4[4], uuid.Data4[5], uuid.Data4[6], uuid.Data4[7]
        );
Rory McCrossan
  • 331,213
  • 40
  • 305
  • 339