ОК, я столкнулся с точно такой же проблемой здесь, и оказалось, что проблема связана с
ThreadingModel = Apartment
По сути, я думаю, что вы испытываете то, что второй поток explorer.exe (рабочий стол выполняется в потоке STA) использует стандартный (устаревший) ThreadingModel
- и ожидает, что ваш COM
реализовать IMarshal
сделать IPC. Apartment
ThreadingModel
позволяет сосуществовать нескольким экземплярам вашего класса IShellExt
.
Предупреждение - Если вы используете ActiveQt
для разработки расширений оболочки контекстного меню, есть еще несколько хитростей, которые можно использовать.