Re[3]: проблема с shell extension
От: Коваленко Дмитрий Россия http://www.ibprovider.com
Дата: 25.07.05 15:44
Оценка:
Здравствуйте, 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
-- Пользователи не приняли программу. Всех пришлось уничтожить. --
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.