C ++ Расширение класса компонентов Windows 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«s RuntimeClassInitialize конструктор. ClassB«s RuntimeClassInitialize Путь к коду никогда не ударил.

Мне интересно, если это правильный способ расширения класса в WRL? Где я делаю неправильно в коде?

2

Решение

Вам нужны переопределенные методы, чтобы иметь то же самое подпись на обоих классах.

этот

HRESULT RuntimeClassInitialize(ParamsForClassA);

Не может быть отменено этим

HRESULT RuntimeClassInitialize(ParamsForClassB);

Потому что они принимают разные аргументы.
Это перегрузка, не переопределение.
(А такие перегрузки вызывают Сокрытие имени)

Вы можете найти информацию о подписи Вот или же Вот.

2

Другие решения


По вопросам рекламы [email protected]