Я реализую интерфейс IDispatch в управляемом коде C#. Чтение документации (да, я знаю, это плохая идея), он говорит, что я могу использовать InterfaceIsDual
, InterfaceIsIDispatch
или InterfaceIsIUnknown
. Я хочу, чтобы мой интерфейс был поздним связыванием, поэтому я бы выбрал InterfaceIsDispatch
. Но затем еще некоторое чтение показывает, что InterfaceIsDual
должен быть таким же. Будет ли какая-либо функциональная разница между выбором Dual и Dispatch?Если атрибут ComInterfaceType никогда не был InterfaceIsDual
2
A
ответ
4
ИнтерфейсIsDual поддерживает как раннее, так и позднее связывание. Что делает его довольно желательным для COM-клиента, ему приходится выбирать между скоростью и поддержкой автоматического завершения раннего связывания и безопасностью позднего связывания.
Аспект безопасности - это то, почему он преуменьшается в документах Microsoft, раннее связывание с интерфейсом, который был изменен позже без соответствующего изменения интерфейса [Guid] производит очень трудно диагностировать ошибки времени выполнения. От нарушения доступа до вызова неправильного метода. Совместимость с версиями COM - большое дело, и жесткие правила, которые следует соблюдать, чтобы избежать неприятностей, слишком часто пропускаются, потому что они вызывают боль.
Смежные вопросы
- 1. Qwindows.dll никогда не был найден
- 2. Fifo никогда не был создан
- 3. Почему Dispose вызывается, если мой объект никогда не был создан?
- 4. Значение атрибута сервлета, если атрибут был заменен
- 5. Файл C никогда не был найден
- 6. Doctrine 2, OneToMany никогда не был заселен
- 7. Django - шаблон - Пользователь никогда не был аутентифицирован
- 8. Android OnLocationChanged никогда не был вызван
- 9. dojo cometd никогда не был готов
- 10. Стек отдельных потоков никогда не был выпущен
- 11. Twitter-предел никогда не был таким строгим
- 12. SQLiteOpenHelper close() никогда не был явно указан
- 13. C# - Мониторинг, если атрибут Readonly любого файла был изменен
- 14. какой был этот эффект (атрибут?)?
- 15. Признать атрибут модели Rails, только если он был ранее пустым
- 16. Основные данные NSManagedObject - отслеживание, если атрибут был изменен
- 17. Проверьте с JavaScript, если обработчик событий был добавлен атрибут
- 18. Атрибут resharper для отключения «никогда не назначенных», но не «никогда не используемых» предупреждений
- 19. если (val = val) не работает! никогда не получает, если блок
- 20. экспресс-маршрут 404 страница никогда не был вызвал
- 21. UIButton добавлен в keywindow никогда не был запущен
- 22. Android Периферийный идентификатор никогда не был таким же
- 23. app: showAsAction всегда показывает атрибут «никогда»
- 24. AsyncCallback, привязанный к WebRequest, никогда не был достигнут
- 25. MVC 4 поймать весь маршрут, который никогда не был достигнут
- 26. Как удалитьRecord, когда он никогда не был зафиксирован на бэкэнд?
- 27. Действительно ли WebClient.DownloadFileTaskAsync() никогда не был тайм-аутом?
- 28. Есть ли стандартный атрибут «никогда не возвращает» для функций C#?
- 29. Если инструкция, кажется, никогда не срабатывает
- 30. , если утверждение, кажется, никогда не оценивается false
Итак, для позднего связывания не должно быть проблем с безопасностью с интерфейсом InterfaceIsDual? –
Если код клиента использует последнее связывание явно, он действует так же, как InterfaceIsDispatch. Безопасно. –