如何查找 COM 对象实现的接口名称






2.29/5 (8投票s)
2002年4月3日

101004
本文描述了您如何查找 COM 对象实现的接口
引言
这是一个帮助你查找 COM 对象实现的接口的类。以下是如何使用该 MsgBox
方法
QI::MsgBox( yourCOMObject );
代码列表
#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 ) ) ) { CComPtrspObject = 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 ); } };