win32 sistemas sistema que programación programacion operativos operativo lenguajes lenguaje c++ windows com windows-shell

c++ - sistemas - ¿Hay una función del sistema operativo para traducir un REFIID a un nombre útil?



sistemas operativos y lenguajes de programación pdf (2)

Sin escribir una función de forma manual que traduce algunos REFIID conocidos a nombres, como:

if (riid == IID_IUnknown) return "IUnknown"; if (riid == IID_IShellBrowser) return "IShellBrowser"; ...

¿Hay una llamada al sistema que devuelva una cadena de depuración razonable para REFIID conocidos (o incluso todos)?


Gracias por las respuestas. A continuación se muestra lo que surgió en función de sus comentarios: ¡muy apreciado!

CString ToString(const GUID & guid) { // could use StringFromIID() - but that requires managing an OLE string CString str; str.Format(_T("%08X-%04X-%04X-%02X%02X-%02X%02X%02X%02X%02X%02X"), guid.Data1, guid.Data2, guid.Data3, guid.Data4[0], guid.Data4[1], guid.Data4[2], guid.Data4[3], guid.Data4[4], guid.Data4[5], guid.Data4[6], guid.Data4[7]); return str; } CString GetNameOf(REFIID riid) { CString name(ToString(riid)); try { // attempt to lookup the interface name from the registry RegistryKey::OpenKey(HKEY_CLASSES_ROOT, "Interface", KEY_READ).OpenSubKey("{"+name+"}", KEY_READ).GetDefaultValue(name); } catch (...) { // use simple string representation if no registry entry found } return name; }


Puede buscar las interfaces predefinidas en el subárbol de registro HKCR / Interface. Cualquier componente puede registrar sus interfaces allí si lo desea. Sin embargo, esto no es obligatorio, el componente puede omitir este registro.