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 }