Обновление ссылки OLE в приложении VB6

У меня есть старое приложение vb6, за поддержание которого я отвечаю, которое сохраняет, открывает и печатает документы Word на компьютере пользователя. На днях, когда мы перешли с Office 2003 на Office 2010, я начал получать жалобы на то, что программа больше не открывала сохраненные отчеты и не печатала их. Удаление Officer 2010 и установка 2003 устраняет проблему.

Подпроцедура, которая обрабатывает это, представляет собой ванильный код msdn, и я не могу найти ничего, что могло бы привязать его к определенной версии Word. Моя следующая мысль, возможно, это ссылка на OLE dll. Где / как мне обновить ссылку VB6 на dll для работы с новой версией офиса?

Будем очень признательны за любые другие предложения.


person Scott    schedule 08.04.2011    source источник


Ответы (3)


Я не уверен, но похоже, что вы пытаетесь использовать раннее связывание. Если так, скорее всего, это ваша проблема.

Об этом уже более десяти лет предупреждают многочисленные статьи в MS KB. Примеры:

http://support.microsoft.com/kb/247579

http://support.microsoft.com/kb/245115

Другими словами: удалите все ссылки на любую версию Word, объявите все объекты As Object и используйте CreateObject() или GetObject(), где это необходимо, вместо Set Obj = New LibName.ClassName.

Эти статьи базы знаний уже устарели, и старые правила, которые позволяют обходиться без компиляции со ссылкой на Word 95 и при этом автоматизировать Word 2002, похоже, больше не применяются. Помимо того, что на вашем компьютере разработчика должна быть установлена ​​самая старая поддерживаемая версия Office, я подозреваю, что восходящая совместимость была нарушена, начиная с Office 2003.

Лучше всего делать позднюю привязку. Потеря производительности для большинства программ минимальна, поэтому самая большая головная боль - это потеря IntelliSense.

person Bob77    schedule 10.04.2011

Если вы просто слепо обновите ссылку, вы, скорее всего, перестанете поддерживать Office 2003. Если это не проблема, сделайте это.

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

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

person DarinH    schedule 08.04.2011

Чтобы ответить на ваш вопрос «Где / как я могу обновить ссылку VB6 на dll для работы с новой версией офиса?»: Конечно, вам понадобится компьютер с установленным Office 2010 и VB 6. Если вы откроете проект в VB IDE, вы можете изменить ссылку на соответствующую библиотеку Word. Ссылки также указаны в файле VBP, например нравится

Type=Exe
Reference=*\G{00020905-0000-0000-C000-000000000046}#8.0#409#C:\Program Files\Microsoft Office\OFFICE11\MSWORD.OLB#Microsoft Word 8.0 Object Library
Reference=*\G{00025E01-0000-0000-C000-000000000046}#4.0#0#C:\Program Files\Common Files\Microsoft Shared\DAO\DAO350.DLL#Microsoft DAO 3.51 Object Library
Reference=*\G{420B2830-E718-11CF-893D-00A0C9054228}#1.0#0#C:\WINDOWS\system32\SCRRUN.DLL#Microsoft Scripting Runtime

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

Если это простой ванильный код, связанный с открытием, сохранением и печатью, трудно представить, что что-то пойдет не так.

С другой стороны - есть ли какие-то «базовые файлы» в формате Word, которые используются? Может быть, у них старый формат (из Office 95, недавно такое видел). Попробуйте открыть эти файлы вручную и посмотрите, что произойдет.

person domke consulting    schedule 09.04.2011