Когда я узнаю агрегацию СОМ, я знаю, что COuterclass::pUnkInner
указывает на CInnerclass::INondelegationUnknown
интерфейс, в то время как CInnerclass::QueryInterface
не принадлежит INondelegationUnknown
, так почему pUnkInner
можно назвать QueryInterface
, например, pUnkInner->QueryInterface
.Почему pUnkInner может вызвать QueryInterface в агрегации COM?
ответ
Не знаете, что такое INondelegationUnknown
- это не часть COM, возможно, специфичная для используемой структуры.
Но ключевая часть, так или иначе, внутренний объект агрегации должен обеспечивать две различные реализации IUnknown
. Один из них является делегирующей реализацией - он переадресует все вызовы указателю IUnknown
, предоставленному внешним в CoCreateInstance
, когда сначала было установлено отношение агрегирования. Все интерфейсы, открытые внутренним, должны реализовать свои три метода IUnknown
таким образом. Внешние руки эти интерфейсы для внешних клиентов - путем делегирования на внешний, сохраняется иллюзия единого бесшовного объекта.
Другая реализация IUnknown
управляет подсчетом ссылок и предоставляет интерфейсы, реализованные самим внутренним объектом (например, обычный COM-объект) - это не делегируемая реализация, которую внешний класс использует для управления внутренним. Он никогда не подвергается внешнему воздействию. Внешняя использует этот не делегирующий указатель в своей собственной реализации QueryInterface
, чтобы получить интерфейсы, реализованные внутренней (а затем передать их клиентам), а также в конечном итоге освободить их.
- 1. Получить COM-интерфейс без QueryInterface
- 2. InvalidCastException, Ошибка вызова QueryInterface на компоненте COM
- 3. QueryInterface не удается выполнить литье внутри реализации COM-интерфейса
- 4. Почему я получаю ExecutionEngineException при попытке COM агрегации
- 5. Как вызвать компонент com +?
- 6. Почему этот COM-код протекает?
- 7. Как вызвать выпуск с COM-сервера
- 8. queryinterface для интерфейса не удалось
- 9. queryinterface для интерфейса не удалось
- 10. Почему COM не работает в новой теме?
- 11. in() method - Typo3 - queryInterface
- 12. CreateWindow от CLSID и QueryInterface в Win32
- 13. Способ вызов может вызвать тупиковый произойти
- 14. Правильный способ вызова AddRef() внутри QueryInterface() осуществление
- 15. Как вызвать метод COM параллельно
- 16. Вызвать COM-метод из dll
- 17. Вызовите QueryInterface перед CoCreateInstance?
- 18. Несколько слов о магии QueryInterface
- 19. Как вызвать функции csImageFile.dll (com) в C#
- 20. Как вызвать COM-компонент в C
- 21. Возможно ли выполнить QueryInterface от имени VBScript
- 22. Почему COM-классы нуждаются в конструкторе? Как использовать COM-класс без регистрации?
- 23. Почему View.setLayoutParams может вызвать ViewGroup.onSetLayoutParams, который защищен?
- 24. почему не может вызвать функцию в классе A, но может вызвать ее в классе B
- 25. Почему Rxjava может вызвать утечку памяти
- 26. Почему эта программа может вызвать утечку памяти?
- 27. Можно ли лишить IDispatch * в IUnknown * без использования QueryInterface для межпроцессных COM-объектов?
- 28. Какова стоимость «как» по сравнению с QueryInterface в COM или dynamic_cast на C++?
- 29. Delphi: Как реализовать QueryInterface IUnknown?
- 30. QueryInterface терпит неудачу с E_NOINTERFACE на C#
Вы всегда можете * вызвать QueryInterface указателем интерфейса. Детали, которые вы, вероятно, пропустили, это то, что INondelegationUnknown происходит от IUnknown, как и все COM-интерфейсы. И поэтому наследует три метода IUnknown. Мы не можем видеть это отсюда, но это нормальный путь. –
Откуда вы изучаете COM? – acelent