2009-02-17 17 views
8

Necesito poder crear guids sobre la marcha. ¿Hay alguna manera de hacerlo en MFC? Veo cómo hacerlo en .net, pero aún no hemos llegado allí. Si no, ¿tiene indicadores de algún código que pueda usar?Cómo puedo crear un guid en MFC

Respuesta

10
GUID guid; 
HRESULT hr = CoCreateGuid(&guid); 

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

La aplicación es responsable de llamar RpcStringFree desasignar la memoria asignado para la cadena devuelta en el parámetro StringUuid.

5

Utilice la UuidCreate función para generar GUID:

UUID generated; 

if (::UuidCreate(&generated) != RPC_S_OK) 
throw std::exception(...); 
6

Puede utilizar la función CoCreateGuid COM, por ejemplo:

GUID guid; 
HRESULT hr = CoCreateGuid(&guid); 
8
//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); 
     } 
    } 
+0

+1 para el tratamiento de errores. – Jichao

+0

+1 para la nota sobre cómo agregar Rpcrt4.lib al proyecto – mrt

1

Puede utilizar este ejemplo

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