代码之家  ›  专栏  ›  技术社区  ›  Rob

COM对象的动态数组

  •  2
  • Rob  · 技术社区  · 16 年前

    Count 属性)并使用其索引访问对象。这个对象集合是动态的-计数不是固定的-我不知道构建主(父)对象时会有多少个对象(因此我无法在我的数据库中创建这些对象) FinalConstruct

    我想做的是创造一个 std::vector CComPtr “CComQIPtr”等。

    IChild ,我希望我能这样做:

    std::vector<CComPtr<IChild> > children;
    ...
    CComPtr<IChild> child;
    // Somehow instantiate an IChild?
    ...
    children.push_back(child);
    
    STDMETHODIMP Parent::GetAt(LONG index, IChild** pRet)
    {
      *pRet = children[index];
    }
    

    如果有人对我如何做到这一点有任何建议,我将非常欢迎。有一个 excellent article on exposing a static object

    2 回复  |  直到 16 年前
        1
  •  6
  •   sharptooth    16 年前

    std::vector< CComPtr<IChild> > 就是这样做的——你会得到一个动态的 IChild* 管理生命周期的 IChild -派生对象。一旦您想要转换 伊希尔德* 对于派生接口,您必须使用 QueryInterface() 与您使用的方法相同 dynamic_cast

    没有使用的意义 CComQIPtr CComQIPtr 就是有一个方便的方式打电话 查询接口() 并检查调用 CComQIPtr 构造函数并检查结果对象是否包含非空指针。你可以用 CComQIPtr

        2
  •  2
  •   MSN    16 年前

    CComPtr<...> 假设您为其分配了一个兼容的接口。 CComQIPtr<...> IUnknown::QueryInterface 以获得正确的接口。这就是为什么需要额外的时间 GUID 作为模板参数。

    CComPtr IChild .

    推荐文章