Introduction
This is a class that helps you to find the interfaces implemented by a COM
object. Here's how you can use that MsgBox method
QI::MsgBox( yourCOMObject );
Code Listing
#include <atlbase.h>
#include <string>
#include <sstream>
class QI : protected CRegKey,
#ifdef _UNICODE
public std::wstringstream
#else
public std::stringstream
#endif
{
protected:
virtual tstring Query( IUnknown* pUnk )
{
if ( pUnk != NULL && ( ERROR_SUCCESS ==
Open( HKEY_CLASSES_ROOT, _T("Interface") ) ) )
{
TCHAR szKeyName[1024] = _T("");
for ( int i = 0; ERROR_SUCCESS ==
RegEnumKey( m_hKey, i, szKeyName, 1024 ); i++ )
{
USES_CONVERSION;
CLSID clsID = CLSID_NULL;
if ( SUCCEEDED( CLSIDFromString( T2OLE(szKeyName),
&clsID ) ) )
{
CComPtr<IUnknown> spObject = NULL;
if ( SUCCEEDED( pUnk->QueryInterface( clsID,
(void**)&spObject ) ) )
{
TCHAR szValue[1024] = _T("");
LONG ncbValue = 1024;
if ( ERROR_SUCCESS == RegQueryValue( m_hKey,
szKeyName, szValue, &ncbValue ) )
*this << tstring(szValue) + _T("\r\n");
}
}
}
Close();
}
return str();
}
public:
static void MsgBox( IUnknown* pUnk )
{
QI objQI;
MessageBox( NULL, objQI.Query( pUnk ).c_str(),
_T("The object implements:"), MB_ICONINFORMATION );
}
};
This article has no explicit license attached to it but may contain usage terms in the article text or the download files themselves. If in doubt please contact the author via the discussion board below.
A list of licenses authors might use can be found here