Word interop. Обратная совместимость.
От: Cyberdrill Россия  
Дата: 15.08.08 07:52
Оценка:
Проблема такая:

Написал программу для обработки вордовского документа. У меня установлен Word 2003, соответственно при разработке использовалась библиотека Office 11 Object library.

У пользователя установлен Word 2000, при работе проги вылетает исключение, что не найдена нужная dllка. Как обойти эту проблему? Поможет ли установка библиотеки 11-й версии в GAC? Допустим я даже установлю сборку, но в C# ведь вызовы методов ворд делаются с полным набором параметров, и в 11 версии число параметров для некоторых функций увеличится ... Вобщем что делать?
Re: Word interop. Обратная совместимость.
От: stump http://stump-workshop.blogspot.com/
Дата: 15.08.08 09:20
Оценка:
Здравствуйте, Cyberdrill, Вы писали:

C>Проблема такая:


C>Написал программу для обработки вордовского документа. У меня установлен Word 2003, соответственно при разработке использовалась библиотека Office 11 Object library.


C>У пользователя установлен Word 2000, при работе проги вылетает исключение, что не найдена нужная dllка. Как обойти эту проблему? Поможет ли установка библиотеки 11-й версии в GAC? Допустим я даже установлю сборку, но в C# ведь вызовы методов ворд делаются с полным набором параметров, и в 11 версии число параметров для некоторых функций увеличится ... Вобщем что делать?


Через late binding (сиречь рефлекшен) работать.
Понедельник начинается в субботу
Re: Word interop. Обратная совместимость.
От: algol Россия about:blank
Дата: 15.08.08 09:34
Оценка:
Здравствуйте, Cyberdrill, Вы писали:

C>У пользователя установлен Word 2000, при работе проги вылетает исключение, что не найдена нужная dllка. Как обойти эту проблему? Поможет ли установка библиотеки 11-й версии в GAC? Допустим я даже установлю сборку, но в C# ведь вызовы методов ворд делаются с полным набором параметров, и в 11 версии число параметров для некоторых функций увеличится ... Вобщем что делать?


А может все гораздо проще и на машине с Word 2000 действительно нет какой-то нужной dll? Что в исключении написано?
Re: Word interop. Обратная совместимость.
От: DiRTy GaRRy  
Дата: 15.08.08 09:44
Оценка: 6 (1)
Здравствуйте, Cyberdrill, Вы писали:

C>Проблема такая:


C>Написал программу для обработки вордовского документа. У меня установлен Word 2003, соответственно при разработке использовалась библиотека Office 11 Object library.


C>У пользователя установлен Word 2000, при работе проги вылетает исключение, что не найдена нужная dllка. Как обойти эту проблему? Поможет ли установка библиотеки 11-й версии в GAC? Допустим я даже установлю сборку, но в C# ведь вызовы методов ворд делаются с полным набором параметров, и в 11 версии число параметров для некоторых функций увеличится ... Вобщем что делать?


При помощи утилиты tlbimp сгенерировать интероп для минимальной версии ворда которую ты собираешся использовать. Далее использовать этот интероп (ставить его с программой). Он так же нормально будет работать и со старшими версиями.
Ы?
Re[2]: Word interop. Обратная совместимость.
От: Cyberdrill Россия  
Дата: 15.08.08 10:36
Оценка:
Здравствуйте, DiRTy GaRRy, Вы писали:

DG>При помощи утилиты tlbimp сгенерировать интероп для минимальной версии ворда которую ты собираешся использовать. Далее использовать этот интероп (ставить его с программой). Он так же нормально будет работать и со старшими версиями.


Вот наткнулся на этот вариант в интернете:
http://www.devcity.net/Articles/163/1/article.aspx

т.е. сейчас мне остается убить ссылку на библиотеку 2003 оффиса и поставить новую сгенерированную? Затем подогнать методы, И все будет работать как с 2000 оффисом, так и выше?
Re[2]: Word interop. Обратная совместимость.
От: Cyberdrill Россия  
Дата: 15.08.08 10:37
Оценка:
Здравствуйте, algol, Вы писали:

A>А может все гораздо проще и на машине с Word 2000 действительно нет какой-то нужной dll? Что в исключении написано?


Нет, все именно так вот сложно ) ...
Re: Word interop. Обратная совместимость.
От: Lloyd Россия  
Дата: 15.08.08 10:43
Оценка: +1
Здравствуйте, Cyberdrill, Вы писали:

C>У пользователя установлен Word 2000, при работе проги вылетает исключение, что не найдена нужная dllка. Как обойти эту проблему? Поможет ли установка библиотеки 11-й версии в GAC? Допустим я даже установлю сборку, но в C# ведь вызовы методов ворд делаются с полным набором параметров, и в 11 версии число параметров для некоторых функций увеличится ... Вобщем что делать?


Работу с вордом вынести в отбельную сборку, которую переписать на VB.NET с использованием late binding
... << RSDN@Home 1.2.0 alpha rev. 786>>
Re[3]: Word interop. Обратная совместимость.
От: algol Россия about:blank
Дата: 15.08.08 10:47
Оценка:
Здравствуйте, Cyberdrill, Вы писали:

A>>А может все гораздо проще и на машине с Word 2000 действительно нет какой-то нужной dll? Что в исключении написано?

C>Нет, все именно так вот сложно ) ...

Что, так трудно было написать сообщение об ошибке? Как хотите, я с помощью не навязываюсь.
Re[3]: Word interop. Обратная совместимость.
От: Cyberdrill Россия  
Дата: 15.08.08 10:54
Оценка:
Здравствуйте, Cyberdrill, Вы писали:

C>Здравствуйте, DiRTy GaRRy, Вы писали:


DG>>При помощи утилиты tlbimp сгенерировать интероп для минимальной версии ворда которую ты собираешся использовать. Далее использовать этот интероп (ставить его с программой). Он так же нормально будет работать и со старшими версиями.


C>Вот наткнулся на этот вариант в интернете:

C>http://www.devcity.net/Articles/163/1/article.aspx

C>т.е. сейчас мне остается убить ссылку на библиотеку 2003 оффиса и поставить новую сгенерированную? Затем подогнать методы, И все будет работать как с 2000 оффисом, так и выше?


Этот вариант оказался самым простым. Все работает. Спасибо.
Re: Word interop. Обратная совместимость.
От: vdimas Россия  
Дата: 18.08.08 16:49
Оценка:
Здравствуйте, Cyberdrill, Вы писали:


C>У пользователя установлен Word 2000, при работе проги вылетает исключение, что не найдена нужная dllка. Как обойти эту проблему? Поможет ли установка библиотеки 11-й версии в GAC? Допустим я даже установлю сборку, но в C# ведь вызовы методов ворд делаются с полным набором параметров, и в 11 версии число параметров для некоторых функций увеличится ... Вобщем что делать?


Через IDispatch звать. Через рефлекшн получить исходники interop-сборки и проставить флаги на интерфейсах так, чтобы методы вызывались только по DispID. Чистые IUnknown-based интерфейсы выбросить вообще. Тело COM-класса оставить пустым (убрать любую базу), оставить только аттрибуты класса, создать его по new, а затем привести экземпляр к необходимому IDispatch-based интерфейсу.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.