У меня есть интерфейс реализации класса 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);
Но на самом деле это относится к конструктору RuntimeClassInitialize
ClassA
. Путь кода RuntimeClassInitialize
ClassB
никогда не срабатывает.
Мне интересно, правильный ли это способ расширения класса в WRL? Где я ошибаюсь в коде?
ClassA
иClassB
принимают разное количество паргументов. Но я передаю правильные аргументы функцииMakeAndInitialize
ClassB. Волшебным образом он переходит в класс А в результате... - person Allan Jiang   schedule 09.08.2014