refiid를 유용한 이름으로 변환하는 OS 기능이 있습니까?
-
06-07-2019 - |
문제
알려진 refiid를 다음과 같은 이름으로 변환하는 함수를 수동으로 작성하지 않아
if (riid == IID_IUnknown) return "IUnknown";
if (riid == IID_IShellBrowser) return "IShellBrowser";
...
잘 알려진 (또는 모든) refiids에 대해 합리적인 디버깅 문자열을 반환하는 시스템 호출이 있습니까?
해결책
응답에 감사드립니다. 아래는 귀하의 의견을 바탕으로 제가 생각해 낸 것입니다. 대단히 감사합니다!
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;
}
다른 팁
HKCR 인터페이스 레지스트리 서브 트리에서 사전 정의 된 인터페이스를 조회 할 수 있습니다. 원하는 경우 모든 구성 요소가 인터페이스를 등록 할 수 있습니다. 그러나 이것은 필수가 아닙니다. 구성 요소는이 등록을 건너 뛸 수 있습니다.
제휴하지 않습니다 StackOverflow