C ++扩展Windows WRL组件类不起作用

Posted

技术标签:

【中文标题】C ++扩展Windows WRL组件类不起作用【英文标题】:C++ Extend Windows WRL component class not working 【发布时间】:2014-08-08 21:58:15 【问题描述】:

我有一个类 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 中扩展类的正确方法?我在代码中哪里做错了?

【问题讨论】:

如果参数不同,那么您将拥有 2 个名为 RuntimeClassInitialize 的成员函数。来自 B 的那个不会覆盖来自 A 的那个 @cppguy ClassAClassB 采用不同数量的参数。但我将正确的参数传递给 ClassB 的 MakeAndInitialize 函数。结果神奇地去了A级...... @AllanJiang 你还看到这个问题吗?在我的机器上没问题。 【参考方案1】:

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

这个

HRESULT RuntimeClassInitialize(ParamsForClassA);

不能被这个覆盖

HRESULT RuntimeClassInitialize(ParamsForClassB);

因为它们采用不同的论点。 这是重载,而不是覆盖。 (而这种重载会导致Name Hiding)

您可以找到签名信息here 或here。

【讨论】:

以上是关于C ++扩展Windows WRL组件类不起作用的主要内容,如果未能解决你的问题,请参考以下文章

在具有绝对路径(例如“C:\...”)的 VSCode 扩展中要求 config.js 文件不起作用

在 Windows 7 上安装 TYPO3 6.2.2 时 PHP OpenSSL 扩展不起作用

C# Split() 函数不起作用

c语言中graphics.h头文件添加了怎么不起作用???

PHP OpenSSL 扩展不起作用

当我使用 tailwindcss 时,扩展运算符不起作用