c++扩展Windows WRL组件类不工作

C++ Extend Windows WRL component class not working

本文关键字:工作 组件 WRL 扩展 Windows c++      更新时间:2023-10-16

我有一个类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);

但这实际上是ClassARuntimeClassInitialize构造函数。ClassBRuntimeClassInitialize代码路径永远不会被命中。

我想知道这是否是在WRL中扩展类的正确方式?我在代码中做错了什么?

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

HRESULT RuntimeClassInitialize(ParamsForClassA);

不能被这个

覆盖
HRESULT RuntimeClassInitialize(ParamsForClassB);

因为它们接受不同的参数。
它是重载,而不是重写。(重载会导致名称隐藏)

你可以在这里或这里找到签名的信息。