Обновление OLE Reference в приложении VB6

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

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

Любые другие предложения будут с благодарностью.

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.

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

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

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

Чтобы ответить на ваш вопрос "Где и как я могу обновить ссылку 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, только что видел это в последнее время). Попробуйте открыть эти файлы вручную и посмотрите, что произойдет.

Другие вопросы по тегам