GuidUtils.h
 1  #pragma once
 2  
 3  #include <shlobj.h>
 4  
 5  inline std::optional<GUID> GuidFromString(const std::wstring& str) noexcept
 6  {
 7      GUID id;
 8      if (SUCCEEDED(CLSIDFromString(str.c_str(), &id)))
 9      {
10          return id;
11      }
12  
13      return std::nullopt;
14  }
15  
16  inline std::wstring GuidToString(const GUID& guid) noexcept
17  {
18      OLECHAR* guidString;
19      StringFromCLSID(guid, &guidString);
20  
21      std::wstring guidWString(guidString);
22      ::CoTaskMemFree(guidString);
23  
24      return guidWString;
25  }
26  
27  inline std::wstring CreateGuidString()
28  {
29      GUID guid;
30      if (CoCreateGuid(&guid) == S_OK)
31      {
32          return GuidToString(guid);
33      }
34  
35      return L"";
36  }