C ++扩展Windows WRL组件类无法正常工作

时间:2014-08-08 21:58:16

标签: c++ windows visual-c++ windows-runtime wrl

我有一个类ClassA实现接口IFooBar,如下所示

class ClassA : public Microsoft::WRL::RuntimeClass<IFooBar>
{
public:
    virtual HRESULT RuntimeClassInitialize(ParamsForClassA);
}

现在我想写一个ClassB固有的ClassA并覆盖它的RuntimeClassInitialize函数,如下所示:

class ClassB : public ClassA
{
public:
    HRESULT RuntimeClassInitialize(ParamsForClassB)
    {
        // implementation goes here
    }
}

我创建了一个指向ClassB对象的指针,如下所示:

ComPtr<ClassB> ptr;
HRESULT hr = MakeAndInitialize<ClassB>(&ptr, ParamsForClassB);

但这实际上是ClassA的{​​{1}}构造函数。 <{1}}的{​​{1}}代码路径永远不会被命中。

我想知道这是否是在WRL中扩展课程的正确方法?我在代码中哪里做错了?

1 个答案:

答案 0 :(得分:2)

您需要重写的方法在两个类上都有相同的签名

HRESULT RuntimeClassInitialize(ParamsForClassA);

无法被此

覆盖
HRESULT RuntimeClassInitialize(ParamsForClassB);

因为他们采取不同的论点 这是重载,而不是覆盖。 (而这种超载导致Name Hiding

您可以找到有关签名herehere的信息。