Здравствуйте, dkotlyarov, Вы писали:
D>Спасибо, часть проблем решилась с внесением данной поправки.
D>Однако я не совсем понял, почему в данном случае необходимо применять static_cast, ведь мы возвращаем указатель на класс через void*, и, таким образом, не должно происходить сужение типа...
static_cast обеспечивает корректное "преобразование" this к указателю на базовый класс IContextMenu. А именно, возвращает указатель, который ссылается на тот участок памяти, где начинаются данные интерфейса IContextMenu — там только указатель на таблицу виртуальных методов хранится.
присваивание вида
*ppv = this;
в твоем случае всегда возвращало указатель на первый в списке наследуемый класс — IShellExtInit. Для IID_IShellExtInit, IID_IUnknown это работало, а для IID_IContextMenu — нет
D>И еще, почему Как минимум для IID_IContextMenu нужно было использовать...
Это не относится в той же мере и к IID_IShellExtInit?
И к нему, в принципе, тоже. А для IUnknown можно, например, возвращать тот же указатель, что и для IShellExtInit
-- Пользователи не приняли программу. Всех пришлось уничтожить. --