Identyfikator klasy (GUID) jest zwykle określany za pomocą ciągu liczb szesnastkowych rozdzielonych myślnikami, np. {557cf406-1a04-11d3-9a73-0000f81ef32e}
. To nie jest literał, który może być użyty do bezpośredniego zainicjowania struktury CLSID.Sposób inicjowania stałej wartości CLSID
Odkryłem dwa sposoby inicjalizacji struktury, ale oba są dość niezręczne. Pierwsza nie pozwala na jej deklarację const
i musi być wykonana w czasie wykonywania, podczas gdy druga wymaga obszernego formatowania stałych heksadecymalnych.
CLSID clsid1;
CLSIDFromString(CComBSTR("{557cf406-1a04-11d3-9a73-0000f81ef32e}"), &clsid1);
const CLSID clsid2 = { 0x557cf406, 0x1a04, 0x11d3, { 0x9a,0x73,0x00,0x00,0xf8,0x1e,0xf3,0x2e } };
Wiem, że Visual Studio generuje jedną automatycznie jeśli masz typ, który jest skojarzony z UUID, używając __uuidof
operator. Czy istnieje sposób, aby to zrobić, jeśli masz tylko ciąg szesnastkowy?
Ahem: http://stackoverflow.com/questions/5345803/does-gdi-have-standard-image-encoder-clsids –
Zawsze możesz użyć funkcji fabrycznej, która nazywa 'CLSIDFromString' - coś w stylu' const CLSID clsid1 = GUIDFactoryFunc ("{557cf406-1a04-11d3-9a73-0000f81ef32e}") ' –
@i_am_jorf dlaczego myślisz, że zadaję pytanie? Muszę użyć odpowiedzi z tego pytania w nowym programie, a kod, który wtedy napisałem, jest pracą sprzed lat i nie jest już dostępny w celach informacyjnych. –