2012-05-01 2 views
2

Я реализую интерфейс IDispatch в управляемом коде C#. Чтение документации (да, я знаю, это плохая идея), он говорит, что я могу использовать InterfaceIsDual, InterfaceIsIDispatch или InterfaceIsIUnknown. Я хочу, чтобы мой интерфейс был поздним связыванием, поэтому я бы выбрал InterfaceIsDispatch. Но затем еще некоторое чтение показывает, что InterfaceIsDual должен быть таким же. Будет ли какая-либо функциональная разница между выбором Dual и Dispatch?Если атрибут ComInterfaceType никогда не был InterfaceIsDual

ответ

4

ИнтерфейсIsDual поддерживает как раннее, так и позднее связывание. Что делает его довольно желательным для COM-клиента, ему приходится выбирать между скоростью и поддержкой автоматического завершения раннего связывания и безопасностью позднего связывания.

Аспект безопасности - это то, почему он преуменьшается в документах Microsoft, раннее связывание с интерфейсом, который был изменен позже без соответствующего изменения интерфейса [Guid] производит очень трудно диагностировать ошибки времени выполнения. От нарушения доступа до вызова неправильного метода. Совместимость с версиями COM - большое дело, и жесткие правила, которые следует соблюдать, чтобы избежать неприятностей, слишком часто пропускаются, потому что они вызывают боль.

+0

Итак, для позднего связывания не должно быть проблем с безопасностью с интерфейсом InterfaceIsDual? –

+0

Если код клиента использует последнее связывание явно, он действует так же, как InterfaceIsDispatch. Безопасно. –

Смежные вопросы