首页 > 解决方案 > 关于 ISupportErrorInfo::InterfaceSupportsErrorInfo() 实现的问题

问题描述

我现在是一名保姆,正在俯瞰一个巨大的旧时(始于上世纪)Windows 代码库,使用 C++ 和 C#,主要使用 COM 作为粘合剂。

我注意到ISupportErrorInfo::InterfaceSupportsErrorInfo()实现(大约 400 个,哇)只是天真,就像这里一样:

STDMETHOD(InterfaceSupportsErrorInfo)(REFIID riid)
{
    static const IID* arr[] =
    {
        &IID_IStore,
    };
    
    for (int i=0; i<sizeof(arr)/sizeof(arr[0]); i++)
    {
        if (InlineIsEqualGUID(*arr[i], riid))
            return S_OK;
    }
    
    return S_FALSE;
}

在我看来,曾几何时,有人(MVP,布道者)写了一本关于 COM 的书,然后每个人都只是不假思索地复制了这些行。

首先,如果我只有一个项目,为什么我需要一个数组?没有数组,我不需要 for 循环。

对我来说,看起来一行就可以了,例如。

return MyCoolHelper::InterfaceSupportsErrorInfo(riid, IID_IStore);

也许您已经看到了支持 1 个或多个 IID-s 的体面实现?

标签: c++comatl

解决方案


推荐阅读