Совместимость программ в разных версиях Windows

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
Filyus
Обычный пользователь
Обычный пользователь
 
Сообщения: 81
Зарегистрирован: 07.07.2011 (Чт) 11:54

Совместимость программ в разных версиях Windows

Сообщение Filyus » 07.07.2011 (Чт) 12:01

Заметил, что если программа простенькая (без классов), то она работает и в Windows 7, и в Windows XP, но если программа сложная, то приходится поставлять её вместе с версией библиотеки msvbvm60.dll, которая использовалась при компиляции.
Как избавиться от необходимости таскать определённую версию msvbvm60.dll вместе с программой? Способ пихать dll в exe не принимается - уж слишком большой файл получится + задержка при запуске.
В отладчике запускал программу с другой версией dll, оказалось, что от чего-то адреса функций определяются неправильно...
Последний раз редактировалось Filyus 07.07.2011 (Чт) 22:40, всего редактировалось 1 раз.

ger_kar
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1957
Зарегистрирован: 19.05.2011 (Чт) 19:23
Откуда: Кыргызстан, Иссык-Куль, г. Каракол

Re: Совместимость программ в разных версиях Windows

Сообщение ger_kar » 07.07.2011 (Чт) 13:48

Я так понимаю, что если приложение скомпилить под Win7, под XP оно работать не будет и наоборот соответственно тоже? Или не работают только приложения скомпилированные под XP и запускаемые под Win7 ?
Бороться и искать, найти и перепрятать

Filyus
Обычный пользователь
Обычный пользователь
 
Сообщения: 81
Зарегистрирован: 07.07.2011 (Чт) 11:54

Re: Совместимость программ в разных версиях Windows

Сообщение Filyus » 07.07.2011 (Чт) 14:03

ger_kar писал(а):Я так понимаю, что если приложение скомпилить под Win7, под XP оно работать не будет и наоборот соответственно тоже? Или не работают только приложения скомпилированные под XP и запускаемые под Win7 ?

Первое.

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Re: Совместимость программ в разных версиях Windows

Сообщение Хакер » 07.07.2011 (Чт) 14:14

Filyus писал(а):Я так понимаю, что если приложение скомпилить под Win7, под XP оно работать не будет и наоборот соответственно тоже?

Это же сказки.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

Filyus
Обычный пользователь
Обычный пользователь
 
Сообщения: 81
Зарегистрирован: 07.07.2011 (Чт) 11:54

Re: Совместимость программ в разных версиях Windows

Сообщение Filyus » 07.07.2011 (Чт) 15:27

Хакер писал(а):Это же сказки.

Ну попробуй в папку с EXE положить другую версию msvbvm60.dll и попробовать запустить. Простенькая программа должна запустится, а сложная должна вылететь с ошибкой.
Версии у меня, например, такие:
Чистый Visual Studio 6.0 - June 24, 1998; 6.0.81.76
Чистая Windows XP SP2 - September 3, 2002; 6.0.96.90
Используемая Windows XP SP2 - October 26, 2006; 6.0.97.97
Используемая Windows 7 - March 5, 2009; 6.0.98.15
Последний раз редактировалось Filyus 07.07.2011 (Чт) 15:43, всего редактировалось 1 раз.

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Re: Совместимость программ в разных версиях Windows

Сообщение Хакер » 07.07.2011 (Чт) 15:36

Выложи версии, посмотрю.

Я за Висту садился только в феврале 2008-го, а за 7-кой не сидел ни разу. Может быть и правда есть какой-то побочный эффект.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

Filyus
Обычный пользователь
Обычный пользователь
 
Сообщения: 81
Зарегистрирован: 07.07.2011 (Чт) 11:54

Re: Совместимость программ в разных версиях Windows

Сообщение Filyus » 07.07.2011 (Чт) 15:47

Версии: 6.0.96.90, 6.0.97.97, 6.0.98.15
Вложения
msvbvm60.rar
(1.7 МиБ) Скачиваний: 69

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Re: Совместимость программ в разных версиях Windows

Сообщение Хакер » 07.07.2011 (Чт) 15:52

Ага. Беру самую последнюю версию. Кладу в папку g:\test\. Туда же компилирую новый проект. И он работает.
Беру один из старых больших проектов. Кладу в его папку самую последнюю версию msvbvm60. И он тоже работает.

Пока что мнение подтверждается: сказки.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

Filyus
Обычный пользователь
Обычный пользователь
 
Сообщения: 81
Зарегистрирован: 07.07.2011 (Чт) 11:54

Re: Совместимость программ в разных версиях Windows

Сообщение Filyus » 07.07.2011 (Чт) 15:59

Похоже что это из-за того, что у меня в программах в импорте два раза упоминается msvbvm60.dll...

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Re: Совместимость программ в разных версиях Windows

Сообщение Хакер » 07.07.2011 (Чт) 16:00

Что импортирует второй импорт?
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

ger_kar
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1957
Зарегистрирован: 19.05.2011 (Чт) 19:23
Откуда: Кыргызстан, Иссык-Куль, г. Каракол

Re: Совместимость программ в разных версиях Windows

Сообщение ger_kar » 07.07.2011 (Чт) 18:24

Filyus писал(а):Ну попробуй в папку с EXE положить другую версию msvbvm60.dll и попробовать запустить

Хакер писал(а):Ага. Беру самую последнюю версию. Кладу в папку g:\test\. Туда же компилирую новый проект. И он работает.Беру один из старых больших проектов. Кладу в его папку самую последнюю версию msvbvm60. И он тоже работает.

А, что можно вот так просто положить в папку с экзешником msvbvm60 другой версии и он будет без регистрации в реестре использоваться вместо родного из папки System32?
Бороться и искать, найти и перепрятать

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Re: Совместимость программ в разных версиях Windows

Сообщение Хакер » 07.07.2011 (Чт) 18:33

ger_kar писал(а):А, что можно вот так просто положить в папку с экзешником msvbvm60 другой версии и он будет без регистрации в реестре использоваться вместо родного из папки System32?

Ох ё-моё. Опять этот бред.

Регистрация — это когда ActiveX-сервер пишет в реестре, какие coclass-ы он (реализованная в нём IClassFactory) умеет создавать, чтобы потом COM смогла, когда ей передадут CLSID и попросят создать объект-экземпляр этого класса, найти соответствующий данному классу ActiveX-сервер, и запросить у него создание объекта.

Хотя msvbvm60 и является (чисто по-совместительству) ActiveX-сервером, использование её EXE-шником совершается по совершенно иному механизму: по механизму импорта функций через таблицу импорта PE. Порядок поиска библиотеки при этом оговорен в MSDN: Dynamic-Link Library Search Order

Думаю, не доп. намекать на то, что директория с EXE значится в списке первой.

P.S. Не смог избежать тавтологии, как ни пытался.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

Filyus
Обычный пользователь
Обычный пользователь
 
Сообщения: 81
Зарегистрирован: 07.07.2011 (Чт) 11:54

Re: Совместимость программ в разных версиях Windows

Сообщение Filyus » 07.07.2011 (Чт) 19:34

Хакер писал(а):Что импортирует второй импорт?

Второй импорт появляется из-за TLB, использующей msvbvm60.
В IDL прописано просто dllname("msvbvm60.dll"), может ещё что-то нужно указать...

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Re: Совместимость программ в разных версиях Windows

Сообщение Хакер » 07.07.2011 (Чт) 19:37

Убери расширение.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

Filyus
Обычный пользователь
Обычный пользователь
 
Сообщения: 81
Зарегистрирован: 07.07.2011 (Чт) 11:54

Re: Совместимость программ в разных версиях Windows

Сообщение Filyus » 07.07.2011 (Чт) 19:40

Хакер писал(а):Убери расширение.

Без него также.
Прикладываю для тестов (и может для использования). В основном функции для работы со строками и с памятью.
Вложения
Filyus IDL,TLB.rar
(27.26 Кб) Скачиваний: 67

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Re: Совместимость программ в разных версиях Windows

Сообщение Хакер » 07.07.2011 (Чт) 20:28

Потестим. Кстати, тебя не задолбало отключать TLB от проекта, чтобы перекомпилировать первую? Хочу написать Add-in-который позволяет одним кликом отключить и подключить всё на место, как раз для таких случаев.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Re: Совместимость программ в разных версиях Windows

Сообщение Хакер » 07.07.2011 (Чт) 20:38

Проверил: получается один импорт DLL.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

Filyus
Обычный пользователь
Обычный пользователь
 
Сообщения: 81
Зарегистрирован: 07.07.2011 (Чт) 11:54

Re: Совместимость программ в разных версиях Windows

Сообщение Filyus » 07.07.2011 (Чт) 20:52

Хакер писал(а):Потестим. Кстати, тебя не задолбало отключать TLB от проекта, чтобы перекомпилировать первую? Хочу написать Add-in-который позволяет одним кликом отключить и подключить всё на место, как раз для таких случаев.

Да не очень.... Закрываю проект, компилю, открываю заново.
Хакер писал(а):Проверил: получается один импорт DLL.

Надо использовать хоть одну функцию из TLB, использующую msvbvm60.

Простейший проект, в архив ещё раз добавил TLB и пару версий msvbvm60.dll.
Вложения
Simple Project.rar
(1.15 МиБ) Скачиваний: 57

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Re: Совместимость программ в разных версиях Windows

Сообщение Хакер » 07.07.2011 (Чт) 21:03

Filyus писал(а):Надо использовать хоть одну функцию из TLB, использующую msvbvm60.

Конечно, я в курсе, поэтому так и сделал. Повторяю: получается один импорт.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

ger_kar
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1957
Зарегистрирован: 19.05.2011 (Чт) 19:23
Откуда: Кыргызстан, Иссык-Куль, г. Каракол

Re: Совместимость программ в разных версиях Windows

Сообщение ger_kar » 07.07.2011 (Чт) 21:06

Хакер писал(а):Ох ё-моё. Опять этот бред
Не хватает слова 'Сивой кобылы' :)
Хакер писал(а):Регистрация — это когда ActiveX-сервер пишет в реестре, какие coclass-ы он (реализованная в нём IClassFactory) умеет создавать, чтобы потом COM смогла, когда ей передадут CLSID и попросят создать объект-экземпляр этого класса, найти соответствующий данному классу ActiveX-сервер, и запросить у него создание объекта.
Это я знаю. Но думал - так как msvbvm60 зарегистрирована в реестре значит она может вызываться не только через таблицу импорта (правда в каких случаях я не знаю). То, что ф-ции вызываются по механизму импорта функций через таблицу импорта знаю ибо исследовал этот момент в Ольке. Но мало ли еще всяких нюансов, поэтому лучше спросить.
Бороться и искать, найти и перепрятать

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Re: Совместимость программ в разных версиях Windows

Сообщение Хакер » 07.07.2011 (Чт) 21:15

ger_kar писал(а):Но думал - так как msvbvm60 зарегистрирована в реестре значит она может вызываться не только через таблицу импорта (правда в каких случаях я не знаю).


Тут надо использовать логику. Если проект импортирует только функции из msvbvm, то зачем ему обращаться к функциям из другой библиотеки, чтобы те в свою очередь обратились к функциям из msvbvm? Чем это лучше, чем напрямую? Ничем. Поэтому используется __vbaNew.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

Filyus
Обычный пользователь
Обычный пользователь
 
Сообщения: 81
Зарегистрирован: 07.07.2011 (Чт) 11:54

Re: Совместимость программ в разных версиях Windows

Сообщение Filyus » 07.07.2011 (Чт) 21:41

Хакер писал(а):
Filyus писал(а):Надо использовать хоть одну функцию из TLB, использующую msvbvm60.

Конечно, я в курсе, поэтому так и сделал. Повторяю: получается один импорт.

Еееее!!! Понял в чём проблема: поставил Service Pack 6 для Visual Studio 6, скомпилил и получился один импорт! СПАСИБО ОГРОМНОЕ!!!=)))
Последний раз редактировалось Filyus 07.07.2011 (Чт) 21:42, всего редактировалось 1 раз.

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Re: Совместимость программ в разных версиях Windows

Сообщение Хакер » 07.07.2011 (Чт) 21:42

Вот, значит не сказки, а баги :)
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Re: Совместимость программ в разных версиях Windows

Сообщение Хакер » 08.07.2011 (Пт) 2:10

Интересно, тут был пост «выкладываю то, что обещал». Потом пост исчез, а обещание было вырезано из первого поста.

Передумал что-ли?
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

ger_kar
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1957
Зарегистрирован: 19.05.2011 (Чт) 19:23
Откуда: Кыргызстан, Иссык-Куль, г. Каракол

Re: Совместимость программ в разных версиях Windows

Сообщение ger_kar » 08.07.2011 (Пт) 7:04

А я таки успел скачать, но еще не заюзал.
Бороться и искать, найти и перепрятать

Filyus
Обычный пользователь
Обычный пользователь
 
Сообщения: 81
Зарегистрирован: 07.07.2011 (Чт) 11:54

Re: Совместимость программ в разных версиях Windows

Сообщение Filyus » 08.07.2011 (Пт) 12:11

Хакер писал(а):Интересно, тут был пост «выкладываю то, что обещал». Потом пост исчез, а обещание было вырезано из первого поста.

Передумал что-ли?

Подумал, что слишком опасно всем передавать=)
Хотел удалить как только Хакер скачает, но всё-таки оставлю
Обсуждение проекта здесь.

Класс HTMLEntities - для замены сущностей (&#...; в HTML)
Класс HTMLParser - парсер HTML (способ обработки ошибок примерно средний для всех браузеров). В частности, теги <HTML>,<HEAD>,<TITLE>,<BODY> добавляются автоматически.
ОБъявление:
Код: Выделить всё
Private WithEvents HTML As HTMLParser

Использование:
Код: Выделить всё
HTML.Parse "Код HTML целиком", True, True

или
Код: Выделить всё
HTML.Parse "Код HTML, первый фрагмент", True, False
HTML.Parse "Код HTML, средний фрагмент", False, False
'...
HTML.Parse "Код HTML, средний фрагмент", False, False
HTML.Parse "Код HTML, последний фрагмент", False, True

или
Код: Выделить всё
HTML.BeforeParsing
HTML.Parse "Код HTML, фрагмент", False, False
'...
HTML.Parse "Код HTML, фрагмент", False, False
HTML.Parse vbNullString, False, True

Событие при нахождении тега:
Код: Выделить всё
Private Sub HTML_FoundTag(Tag As HTMLTag, IsStartTag As Boolean, IsEndTag As Boolean)

Tag.name - имя тега
Tag.Path - путь теги (например, /HTML/HEAD/TITLE/)
Tag.Parent - родительский тег
IsStartTag - True если тег открывающийся (например, "<a>")
IsEndTag - True если тег закрывающийся (например, "</a>")
Tag.InnerText - Текст внутри тега, включая текст во всех дочерних тегах
Tag.Attr("имя атрибута") - Значение атрибута

Класс Socket и модуль SocketModule - для работы с TCP и UDP
Класс HTMLTag - свойства тегов, в том числе рекурсивные
Класс HTTPDownloader - скачивание по HTTP, есть поддержка чанков (chunks), перенаправлений, чтения куки, определения кодировки
Модуль Inflate - отвечает за поддержку GZip и Deflate сжатия в HTTP
Модуль Encoding - определение номера кодировки по её названию, конвертирование в/из UTF8/UTF16
Модуль Strings - конвертирование в/из Base64 (для создания MD5-хеша свзяки "логин:пароль", использующейся при авторизации на прокси), конвертирование URL-адресов и другое
Модуль Crypting - MD5-шифрование. Зачем он тут - не помню :)
Вложения
TCP.rar
(54.05 Кб) Скачиваний: 75
Последний раз редактировалось Filyus 08.07.2011 (Пт) 13:10, всего редактировалось 1 раз.

Antonariy
Повелитель Internet Explorer
Повелитель Internet Explorer
Аватара пользователя
 
Сообщения: 4824
Зарегистрирован: 28.04.2005 (Чт) 14:33
Откуда: Мимо проходил

Re: Совместимость программ в разных версиях Windows

Сообщение Antonariy » 08.07.2011 (Пт) 13:10

Какой-то странный html-парсер, который очень быстро делает свою работу, но не выдает результата…
Последний раз редактировалось Antonariy 08.07.2011 (Пт) 13:14, всего редактировалось 1 раз.
Лучший способ понять что-то самому — объяснить это другому.

Filyus
Обычный пользователь
Обычный пользователь
 
Сообщения: 81
Зарегистрирован: 07.07.2011 (Чт) 11:54

Re: Совместимость программ в разных версиях Windows

Сообщение Filyus » 08.07.2011 (Пт) 13:13

Antonariy писал(а):Какой-то странный html-парсер, который что-то делает, но не выдает результата…

В приведённом коде результат выводится в окно отладки. Выводятся тексты и адреса всех ссылок на странице.
Код: Выделить всё
  If Tag.name = "A" And IsEndTag Then
    s = Tag.InnerText
    If Len(s) <> 0 Then
      Debug.Print s & " " & Tag.Attr("href")
    End If
  End If

Antonariy
Повелитель Internet Explorer
Повелитель Internet Explorer
Аватара пользователя
 
Сообщения: 4824
Зарегистрирован: 28.04.2005 (Чт) 14:33
Откуда: Мимо проходил

Re: Совместимость программ в разных версиях Windows

Сообщение Antonariy » 08.07.2011 (Пт) 14:01

Разобрался.
Работает быстрее этого почти в 9 раз. Десять проходов текущей страницы (posting.php?mode=reply):
Код: Выделить всё
Dim WithEvents hp As HTMLParser

Private Sub Form_Load()
Dim t() As TagsType
Dim tm
    sHTML = ReadFile("1.htm")
    Set hp = New HTMLParser
    tm = Timer
    For x = 1 To 10
        hp.Parse sHTML, True, True
    Next
    Debug.Print Timer - tm
    tm = Timer
    For x = 1 To 10
        ParseHTML CStr(sHTML), t
    Next
    Debug.Print Timer - tm
End Sub

Private Sub hp_FoundTag(Tag As HTMLTag, IsStartTag As Boolean, IsEndTag As Boolean)
    x = 0
End Sub

1,015625
8,75
Зачетно.
Лучший способ понять что-то самому — объяснить это другому.

Filyus
Обычный пользователь
Обычный пользователь
 
Сообщения: 81
Зарегистрирован: 07.07.2011 (Чт) 11:54

Re: Совместимость программ в разных версиях Windows

Сообщение Filyus » 08.07.2011 (Пт) 15:10

Antonariy писал(а):Разобрался.
Работает быстрее этого почти в 9 раз.

Всё равно охота ещё быстрее сделать=)

След.

Вернуться в Visual Basic 1–6

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 16

    TopList  
cron