描述:
对于支持抛出COM异常的组件,需要ISupportErrorInfo接口
class ATL_NO_VTABLE CSample :
public CComObjectRootEx<CComSingleThreadModel>,
public CComCoClass<CParser, &CLSID_Parser>,
public ISupportErrorInfo,
public IDispatchImpl<IParser, &IID_IParser, &LIBID_sampleLib, /*wMajor =*/ 1, /*wMinor =*/ 0>
{
public:
组件的ISupportErrorInfo接口其实就一个方法InterfaceSupportsErrorInfo,用来判断组件中某一接口是否支持截获异常。
STDMETHODIMP CParser::InterfaceSupportsErrorInfo(REFIID riid)
{
static const IID* arr[] =
{
&IID_IParser
};
for (int i=0; i < sizeof(arr) / sizeof(arr[0]); i++)
{
if (InlineIsEqualGUID(*arr[i],riid))
return S_OK;
}
return S_FALSE;
}
也就是说:只有接口位于arr表中时,客户端才可以截获异常。
static const IID* arr[] =
{
&IID_IParser
};
总结:只有接口位于arr表中时,客户端才可以截获异常。但并不影响其在组件实现中抛出异常。
为什么要这么作呢?为了效率?