Наследование интерфейса и IUnknown, определения методов IDispatch
Мне нужно наследовать интерфейс с абстрактными методами, в VB/ C# мы просто переопределяем методы из нашего интерфейса, в то время как нет необходимости кодировать методы IUnknown или IDispatch
но в C++, после наследования интерфейса в классе и переопределения методов в интерфейсе, когда я пытался создать экземпляр производного класса, я получаю следующую ошибку
error C2259: 'Imyinterface' : cannot instantiate abstract class
1> due to following members:
'HRESULT IUnknown::QueryInterface(const IID &,void **)' : is abstract
'ULONG IUnknown::AddRef(void)' : is abstract
'ULONG IUnknown::Release(void)' : is abstract
поэтому мне нужно переопределить / определить методы IUnknown и IDispatch, например, addref,Release,QueryInterface,invoke,gettypeinfo
поскольку они кажутся стандартными функциями, где я могу получить их код / определения egATL или любую библиотеку типов? или любые ссылки, где я могу получить код / примеры вышеуказанных методов
2 ответа
QueryInterface
: Если интерфейс, идентифицируемый переданным GUID, может быть достигнут, поместите указатель на интерфейс в void **
параметр; еще установить void **
в NULL
, Верните соответствующий HRESULT
,
AddRef
: Увеличить счетчик ссылок интерфейса.
Release
: Уменьшить счетчик ссылок интерфейса.
Я хотел бы предложить получить хорошую книгу по COM, прежде чем углубляться в это. Используемые копии Inside Com (Microsoft Programming Series) Дейла Роджерсона дешевы. У него есть примеры. Прочитайте обзоры на Amazon, чтобы узнать, хотите ли вы купить эту книгу или нет.
Вам необходимо переопределить эти методы и предоставить их определения (в вашем производном классе) и для всех функций, объявленных чисто виртуальными в вашем базовом классе.
Если вы этого не сделаете, ваш производный класс также будет действовать как абстрактный класс, и вы не сможете создавать его объекты.
Что касается второго вопроса, нет, я не имею ни малейшего представления о том, что должны делать стандартные реализации этих методов.