Почему у Microsoft есть IHTMLDocument, IHTMLDocument2, …, IHTMLDocument8?

Что означает число в конце имени интерфейса? я вижу это IHTMLDocument3-7 нет участников (см. пример для № 5), а также 8 имеет жест связанных членов. Число получено из версии Windows?

7

Решение

Это общая особенность общедоступных COM-интерфейсов.

Если вам нужна обратная совместимость, вы никогда не захотите менять опубликованный интерфейс, потому что это будет означать, что весь код, написанный для, скажем, IE 6, перестает работать с IE 7, и все их клиенты злятся на них, и они злятся на тебя.

Таким образом, если IE 5 добавляет новые функции, которые должны быть выставлены, вместо изменения IHTMLDocument, вы создаете новый интерфейс и заставляете IE5 поддерживать оба (по наследству, QueryInterfaceили какой-то более явный механизм). И когда IE 7.0.2 или IE 8 или Win XP или что-то еще добавляет новые функции, вы создаете еще одну. И так далее.

Хотя MS могла бы придумать описательные суффиксы вместо просто последовательных чисел, это, вероятно, было бы скорее сбивающим с толку, чем полезным. Так, IHTMLDocument2, IHTMLDocument3и т. д. являются имена. Они ничего не значат, кроме порядка их добавления.

17

Другие решения

Что означает число в конце имени интерфейса?

Это стандартное соглашение для управления версиями COM-интерфейсов. IXXX2 расширяет IXXX новыми функциями. IXXX3 расширяет IXXX2 новыми функциями и так далее. Это позволяет клиентам использовать старые функции без перерыва при выпуске новых версий, а также использовать новые функции при желании, даже проверять, доступны ли эти функции, прежде чем пытаться вызвать их.

Я вижу, что у IHTMLDocument3-7 нет участников

Откуда вы взяли эту идею? Посмотрите на их фактические определения. Они открывают множество новых членов от одного интерфейса к другому.

3

Нет — это просто означает другую версию интерфейса. Это не имеет никакого отношения к версии Windows (и, в этом отношении, мало / ничего не имеет к версии MSHTML):

2

по состоянию на http://msdn.microsoft.com/en-us/library/aa752541(v=vs.85).aspx

где мы можем увидеть:

Интерфейс IHTMLDocument3 наследуется от IDispatch
интерфейс, но не имеет дополнительных членов.

это может быть немного запутывающим для новичков, чтобы взаимодействовать с миром.

1
По вопросам рекламы [email protected]