Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2011.01.30;
Скачать: CL | DM;

Вниз

Версионность MS XML движка   Найти похожие ветки 

 
Пит   (2010-10-12 14:34) [0]

Насколько я понял, начиная с четвертой версии движка MS XML выдерживается параллельность версий. То есть, если я создам:

CreateOleObject("Msxml2.DOMDocument.4.0") as IXMLDomDocument2

То при отсутствии четвертой версии движка будет ошибка. Хотя при этом может быть установлена пятая и шестая версия. И насколько я понял, пятая и шестая версия полностью поддерживает те интерфейсные объекты, которые могут быть в четвертой версии.

Из-за работы со схемами минимально мне нужная версия 4.0
Но чтобы не заставлять пользователей ставить именно эту версию при наличии более новой, верно ли, что я могу начать последовательно создавать все более новые версии объектов. То есть:

try
 My := CreateOleObject("Msxml2.DOMDocument.4.0") as IXMLDomDocument2
except on E:blabla
 try
   My := CreateOleObject("Msxml2.DOMDocument.5.0") as IXMLDomDocument2
 except on E:blabla
   My := CreateOleObject("Msxml2.DOMDocument.6.0") as IXMLDomDocument2
 end;
end;


Как-то так?

Должны быть, наверное, более красивые решения вопроса.


 
Медвежонок Пятачок ©   (2010-10-12 14:37) [1]

То при отсутствии четвертой версии движка будет ошибка.

Ну и что?
Ты видел скрипты создания mshmlhttprequest?
Там вилок намого больше.
сначала идет попытка создать встроенный в браузер объект.
если браузер его не поддерживает, идут попытки создания activx объектов разных версий.

последовательно сверху вниз.


 
Пит   (2010-10-12 14:42) [2]

вопрос, собственно, содержится вот здесь:


> Но чтобы не заставлять пользователей ставить именно эту
> версию при наличии более новой, верно ли, что я могу начать
> последовательно создавать все более новые версии объектов.
>  То есть:
> ...

> Как-то так?
>
> Должны быть, наверное, более красивые решения вопроса


 
Медвежонок Пятачок ©   (2010-10-12 14:45) [3]

ну как как.
шестая версия тебя устраивает?
если да, начинай создание с нее.
если есть - работаешь, если нет - создаешь четвертую.
получилось - работаешь с четвертой - не получилось - спускаешься последовательно до минимально возможной версии.


 
DVM ©   (2010-10-12 14:58) [4]

Вот из-за таких вещей я и не люблю MS XML. Конечно, он лучше разного рода самоделок, но эти версии...


 
Sergey Masloff   (2010-10-12 15:15) [5]

А не проще создать по независимому имени, потом взять версию и если она ниже нужной - сказать "не могу" а если выше - спокойно работать? Зачем точная версия?


 
Пит   (2010-10-12 15:33) [6]


> А не проще создать по независимому имени, потом взять версию
> и если она ниже нужной - сказать "не могу" а если выше -
>  спокойно работать?

можно набросать пример?

Еще я вот что читал:

Отказ от не зависящих от версии ProgID

По похожим причинам была устранена поддержка не зависящих от версии ProgID. По сравнению с предыдущими версиями, в которых некоторые ProgID обновлялись при установке новой версии MSXML, отказ от них в MSXML 4.0 обеспечивает реальную установку, гарантирующую паралллельное функционирование версий. Теперь CreateObject("MSXML2.DOMDocument") не создает экземпляр объекта MSXML 4.0 DOM, а создает экземпляр объекта предыдущей версии. Если вы хотите использовать MSXML 4.0, вы должны создать объект так: CreateObject("MSXML2.DOMDocument.4.0").


 
Пит   (2010-10-12 15:37) [7]


> шестая версия тебя устраивает?
> если да, начинай создание с нее.

непонятная логика. Меня по идее устраивает все, что начинается с четвертой версии. Я исхожу из того, что все фичи, поддерживаемые четвертой версией - поддерживаются и следующими.

Непонятно, почему ты предлагаешь создавать с шестой версии. А если через 5 лет у человека будет Windows 8 с предустановленной MS XML 7?

На мой взгляд логичнее тут создавать, начиная с минимально необходимой мне версии движка (который поддерживает интерфейс нужного мне объекта) и дальше по нарастающей. Но до какого предела? Забить в цикле :

My := CreateOleObject("Msxml2.DOMDocument.4.0") as IXMLDomDocument2;
...
My := CreateOleObject("Msxml2.DOMDocument.5.0") as IXMLDomDocument2;
...
My := CreateOleObject("Msxml2.DOMDocument.6.0") as IXMLDomDocument2;
...
My := CreateOleObject("Msxml2.DOMDocument.7.0") as IXMLDomDocument2;
...
My := CreateOleObject("Msxml2.DOMDocument.15.0") as IXMLDomDocument2;
...
My := CreateOleObject("Msxml2.DOMDocument.XXX.0") as IXMLDomDocument2;

До какой величины наращивать XXX? :-)

Чую должен быть более красивый подход.


 
DVM ©   (2010-10-12 15:45) [8]


> До какой величины наращивать XXX? :-)

до необходимой тебе очевидно.


 
Медвежонок Пятачок ©   (2010-10-12 15:57) [9]

до какого предела?

До MAXINT ясен перец


 
Пит   (2010-10-12 16:28) [10]


> до необходимой тебе очевидно.

То ли я не понял ответа, то ли ты не вник вопроса. Я начинаю с необходимой мне версии.


> До MAXINT ясен перец

по-моему, я вполне нормально сформулировал вопрос.


 
Медвежонок Пятачок ©   (2010-10-12 16:40) [11]

и чем же не устраивает ответ?


 
Медвежонок Пятачок ©   (2010-10-12 16:43) [12]

допустим, что через 50 лет старшая версия msxml будет равна 100.
тогда цикл
for i := 1 to maxint
сделает брейк на девяностодевятой итерации (и то при условии, что у клиента только сотая версия и есть в наличии. А реально и того раньше)

что не так?


 
Kerk ©   (2010-10-12 16:48) [13]


> Медвежонок Пятачок ©   (12.10.10 16:43) [12]
>
> допустим, что через 50 лет старшая версия msxml будет равна
> 100.
> тогда цикл
> for i := 1 to maxint
> сделает брейк на девяностодевятой итерации (и то при условии,
>  что у клиента только сотая версия и есть в наличии. А реально
> и того раньше)

А если у него нет вообще никакой? :)


 
Медвежонок Пятачок ©   (2010-10-12 16:51) [14]

ну тогда программа полный цикл прогонит. всего-то.


 
DVM ©   (2010-10-12 18:42) [15]


> Пит   (12.10.10 16:28) [10]
>
> > до необходимой тебе очевидно.
>
> То ли я не понял ответа, то ли ты не вник вопроса. Я начинаю
> с необходимой мне версии.
>

ну и правильно делаешь, если тебе достаточно 4 версии, зачем искать 5, и т.д. Тебе шашечки или ехать? Ехай на 4-ой.


 
Пит   (2010-10-12 18:54) [16]


> если тебе достаточно 4 версии, зачем искать 5, и т.д.


ответ:


> чтобы не заставлять пользователей ставить именно эту версию
> при наличии более новой


 
DVM ©   (2010-10-12 19:07) [17]


> Пит   (12.10.10 18:54) [16]
>

Предлагаю определить установленную в системе последнюю версию парсера и использовать ее, если она подходит


 
DVM ©   (2010-10-12 19:10) [18]


> Пит  

в HKEY_CLASSES_ROOT перечислены все установленные версии MSXML


 
Пит   (2010-10-12 19:38) [19]


> в HKEY_CLASSES_ROOT перечислены все установленные версии
> MSXML

чем это отличается от последовательного создания интерфейсных объектов?


> Предлагаю определить установленную в системе последнюю версию
> парсера

как это можно сделать?

Есть где-то запись аля: "LastVerXMLParser" ?


 
DVM ©   (2010-10-12 21:17) [20]


> Пит   (12.10.10 19:38) [19]


> чем это отличается от последовательного создания интерфейсных
> объектов?

там точно ты будешь знать когда остановиться.


> Есть где-то запись аля: "LastVerXMLParser" ?

думаю есть, так как есть утилита от MS которая мгновенно выдает версию XML  парсера.


 
Kerk ©   (2010-10-12 23:13) [21]

Никак не пойму, что мешает без указания версии создавать?

My := CreateOleObject("Msxml2.DOMDocument") as IXMLDomDocument2


 
Плохиш ©   (2010-10-12 23:18) [22]


> Kerk ©   (12.10.10 23:13) [21]

Он просил серсию 4, а ты ему 3 предлагаешь :-)


 
Kerk ©   (2010-10-12 23:30) [23]


> Плохиш ©   (12.10.10 23:18) [22]

Да, это ты прав.
Вообще, есть статейка, с которой сложно не согласиться
http://msdn.microsoft.com/en-us/library/ms761415%28v=VS.85%29.aspx
Странного желает топикстартер


 
Пит   (2010-10-13 11:58) [24]


> там точно ты будешь знать когда остановиться.

каким образом? Если там есть записи аля:

Msxml2.DOMDocument.5.0
Msxml2.DOMDocument.6.0
Msxml2.DOMDocument.XXX.0

Откуда я знаю когда остановиться? Точно также надо перебирать в цикле.

Конечно, скорее всего есть вариант взять все записи начинающиеся с Msxml2.DOMDocument, распарсить их и вычислить наибольшее значение... Блин, ну ведь точно должен быть более оптимальный вариант то?!


> думаю есть

я вот тоже думаю, что есть. Этому и посвящен топик, я ответа не знаю )


> Никак не пойму, что мешает без указания версии создавать?

такой вопрос в этой теме уже задавался в посте номер [5] и я на него отвечал в посте номер [6]


 
Пит   (2010-10-13 12:03) [25]


> Вообще, есть статейка, с которой сложно не согласиться
> http://msdn.microsoft.com/en-us/library/ms761415%28v=VS.
> 85%29.aspx
> Странного желает топикстартер

прочитай, пожалуйста, всю ветку, чтобы все таки вникнуть в проблему.

Я полностью согласен с MS, что если минимально необходимая мне версия это 4.0, то не стоит использовать версию 3.0

Но если у клиента уже установлена версия 5.0, то почему бы не использовать ее? Весь смысл ветки в этом.


 
Медвежонок Пятачок ©   (2010-10-13 12:09) [26]

прямо гений в муках.
гений хочет сегодня написать код, который не надо будет править сто лет.
но гений боится константы maxint.


 
Плохиш ©   (2010-10-13 12:15) [27]

Судя по тому, что сам мелкий софт в предлагаемой программе определения установленных версий содержит список названий, тему дальше мусолить смысла не вижу.


 
Пит   (2010-10-13 14:41) [28]


> Судя по тому, что сам мелкий софт в предлагаемой программе
> определения установленных версий содержит список названий,
>  тему дальше мусолить смысла не вижу.

даже так ) Забавно ))

Я уже сделал перебор от 4-ой до 8-ой версии ) Ну так и оставлю, я все таки думал, что есть какой-то красивый способ определить максимальную версию XML движка.


 
DVM ©   (2010-10-13 14:46) [29]


> Пит   (13.10.10 11:58) [24]


> каким образом? Если там есть записи аля:
>
> Msxml2.DOMDocument.5.0
> Msxml2.DOMDocument.6.0
> Msxml2.DOMDocument.XXX.0
>
> Откуда я знаю когда остановиться? Точно также надо перебирать
> в цикле.

ключей, начинающихся с MSXML, да и вообще ключей там значительно меньше чем MAXINT


 
Медвежонок Пятачок ©   (2010-10-13 14:54) [30]

да и вообще ключей там значительно меньше чем MAXINT

Ты просто не понял замысла гения.
их (ключей) сейчас меньше. А через тысячу лет их будет возможно  близко к максинт. В смысле номер версии будет с каждым тысячелетием приближаться к максинту.

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

Ну типа чтобы не переписывать потом.


 
Пит   (2010-10-13 15:36) [31]

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

Те, кто пытается сделать так, чтобы работало в по возможности в большем количестве случаев зовутся гениями. Это правда )


 
Медвежонок Пятачок ©   (2010-10-13 15:58) [32]

тогда тебе больше подойдет макскардинал, а не максинт.
еще надольше хватит


 
Kerk ©   (2010-10-13 16:25) [33]

максинт, максардинал, а что если появится версия Msxml2.DOMDocument.9.1 ?
это тоже учитывать?


 
Пит   (2010-10-13 17:13) [34]

ну думаю Медвеженок предложит делать два цикла вложенных, где два раза бегать до макскарлинал. Пятачки они такие )))


 
Медвежонок Пятачок ©   (2010-10-13 17:34) [35]

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


 
Kerk ©   (2010-10-13 18:05) [36]

Я бы на самом деле забил в строковый массив известные мне версии MSXML и ходил циклом по нему. Угадывать имена будущих версий смысла нет ибо:
1) Нет гарантии, что формат названия не изменится (был же когда-то Microsoft.XMLDOM)
2) Нет гарантии, что сегодня написанный код сможет работать с этой неизвестной версией из будущего



Страницы: 1 вся ветка

Текущий архив: 2011.01.30;
Скачать: CL | DM;

Наверх




Память: 0.56 MB
Время: 0.009 c
4-1244470156
warner
2009-06-08 18:09
2011.01.30
Как прочитать текст в ячейках чужого ListView?


2-1289628270
Gu
2010-11-13 09:04
2011.01.30
TreeView, имя текущего элемента


11-1229310616
L`Autour
2008-12-15 06:10
2011.01.30
Вопрос по перехвату LVN_GETDISPINFOW


6-1233739684
ego
2009-02-04 12:28
2011.01.30
программная работа с vkontakte


15-1286122969
@!!ex
2010-10-03 20:22
2011.01.30
Java 4-ever