![]() |
Модераторы: diadiavova, gambit |
![]() ![]() ![]() |
|
flog |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 3 Регистрация: 15.1.2013 Репутация: нет Всего: нет |
Добрый вечер.
Суть проблемы заключается в том что была написана программа которая должна была из множества файлов Word одного шаблона (в шаблоне расположены 99 таблиц) создавать 99 файлов одних и тех же таблиц формата Word. Реализовано все это было методом поиска по меткам в шаблоне. при переходе на более новые версии msWord(с 2007 на 2010) и VB(с 2008 на 2012). программа стала выдавать ошибки при сохранении, при закрытии, может вылететь(Подвиснуть) сама программа Word. До перехода было все нормально все работало. Причем ошибки могут вылетать не каждый раз. Помогите если сможете разобраться в чем проблема. при анализе исходного кода выдает следующие сообщение для инструкции Clipboard.Clear() CA2202 Не ликвидировать объекты несколько раз Объект "'mdO.Tables.GetEnumerator()'" можно удалять более одного раза в методе 'Form1.Button3_Click(Object, EventArgs)'. Чтобы избежать исключения System.ObjectDisposedException, следует вызывать метод "Dispose" для объекта только один раз.: Lines: 170 Отчеты кафедр Form1.vb 170 сам код процедуры:
Это сообщение отредактировал(а) flog - 15.1.2013, 17:38 |
|||
|
||||
diadiavova |
|
|||
![]() Доктор Зло(диагност, настоящий, с лицензией и полномочиями) ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 5821 Регистрация: 14.8.2008 Где: В Коньфпольте Репутация: 8 Всего: 142 |
Слишком много кода в одном методе. Код нечитабелен, особенно если писал его кто-то другой. Кроме того, неясно где здесь 170-я строка, здесь она какая? Но вообще, если бы код правилно был разбит на методы, то ты и сам нашёл бы проблему. Судя по сообщению у тебя один объект уничтожается более одного раза. Ищи где ты его удаляешь, по всей видимости в цикле и по всей видимости в этом цикле он не инициируется, таким образом при следующей итерации переменная может оказаться пустой. Находится это где-то недалеко от 170-ой строки кода. Кроме того, не забывай. что диспоуз обычно вызывается из метода клоуз, то есть подозрение более всего падает на строки типа
md0.Close() ну или что-то в этом роде. -------------------- Хочешь получить мудрый совет - читай подписи участников форумов. Злой доктор Щасзаболит ![]() |
|||
|
||||
flog |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 3 Регистрация: 15.1.2013 Репутация: нет Всего: нет |
в данном фрагменте это 132 строка, все лишь очистка буфера обмена, да она в цикле по другому никак что бы не переполнить сам буфер обмена, перетаскивание таблиц происходит методом переноса через буфер, в цикле потому что таблицы иногда могут быть разорванными и они просто копируются кусками. строки типа md0.Close() - используются для закрытия документов естественно они тоже в цикле так как нужно перебрать все файлы из папки.
при выполнении программы выдается ошибка вида - Вызов был отклонен. (Исключение из HRESULT: 0x80010001 (RPC_E_CALL_REJECTED)) Отладчик:Перехвачено исключение: Button3_Click, Form1.vb строка 161 (к куске она 124 - перемещение курсора)- строка бывает разная но ошибка одна. Исключение перехвачено, а стек вызовов возвращен к состоянию на момент поступления вызова от пользовательского кода, где произошло исключение. В параметрах отладчика выбрано значение "Очистить стек вызовов от кадров необработанных исключений". Иногда эта ошибка не вылетает причем на одном и том же множестве файлов, один раз ошибка в другой все нормально проходит. такое ощущение складывается что это сама вордовская библиотека сбоит. хотя офис уже много раз переставлял причем разные версии и подключал разные версии библиотек. я то понимаю что там написано. только не пойму почему так получилось на уже давно отлаженной программе |
|||
|
||||
diadiavova |
|
|||
![]() Доктор Зло(диагност, настоящий, с лицензией и полномочиями) ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 5821 Регистрация: 14.8.2008 Где: В Коньфпольте Репутация: 8 Всего: 142 |
Ну там ругается анализатор кода из-за того, что документ закрывается дважды. У тебя там в первый раз это происходит в условии с возвратом к началу цикла, а анализатор это не учитывает, так что тут нормально всё. Собственно исходил из тех данных об ошибке, которые ты предоставил.
Это ком-исключение, ругается сама библиотека офиса. Честно говоря, штука очень проблемная и я тут вряд ли смогу точный рецепт дать. Могу предположить, что тут какие-то разрешения виконфигурации прописать надо. В принципе, если раньше всё хорошо было, а проблема стала возникать именно при смене студди, то посмотри в свойствах проекта целевой фреймворк и если там 4 или выше, то замени на 3,5 например. У 4-го фреймворка система безопасности ( том числе при работе с ком) - другая, так что похоже, что дело в этом. -------------------- Хочешь получить мудрый совет - читай подписи участников форумов. Злой доктор Щасзаболит ![]() |
|||
|
||||
flog |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 3 Регистрация: 15.1.2013 Репутация: нет Всего: нет |
поиграв с версиями фреймворк ничего не помогло выдает следующее исключение
-Исключение:Вызвано: "Вызов был отклонен. (Исключение из HRESULT: 0x80010001 (RPC_E_CALL_REJECTED))" (System.Runtime.InteropServices.COMException) Возникло System.Runtime.InteropServices.COMException: "Вызов был отклонен. (Исключение из HRESULT: 0x80010001 (RPC_E_CALL_REJECTED))" - сбой при удаленном вызове процедуры 0x800706be ничего хорошего из этого не получил, то может пройти цикл 20 проходов и выдать ошибку то и 2 не может пройти может как ни то по другому можно передать таблицы из одного документа в другой не использую буфер обмена? |
|||
|
||||
diadiavova |
|
|||
![]() Доктор Зло(диагност, настоящий, с лицензией и полномочиями) ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 5821 Регистрация: 14.8.2008 Где: В Коньфпольте Репутация: 8 Всего: 142 |
Я с всто знаком очень поверхностно, так что вряд ли смогу помочь. Лучше всего на специализированном форуме спросить. На офсайте вроде есть на английском форум. Вообще с ком-взаимодействием такое бывает, иногда не нахожу ничего лучшего, как только обработать исключение и всё, что не проходит пропустить.
Таблицу можно в переменную скопировать, если правильно вопрос понял. А вообще, если формат документа docx, а не doc, то можно вообще без ком-библиотек обойтись http://www.microsoft.com/en-us/download/details.aspx?id=5124 там этих проблем точно не будет. -------------------- Хочешь получить мудрый совет - читай подписи участников форумов. Злой доктор Щасзаболит ![]() |
|||
|
||||
diadiavova |
|
|||
![]() Доктор Зло(диагност, настоящий, с лицензией и полномочиями) ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 5821 Регистрация: 14.8.2008 Где: В Коньфпольте Репутация: 8 Всего: 142 |
В принципе справка по исключению
http://support.microsoft.com/kb/329854/en-us Здесь правда говорится, что исключение может вылетать при подключении к другому компу, но это всё-таки ком-взаимодействие, так что фиг его знает, тут всё может случиться ![]() -------------------- Хочешь получить мудрый совет - читай подписи участников форумов. Злой доктор Щасзаболит ![]() |
|||
|
||||
![]() ![]() ![]() |
Правила форума VB .NET | |
|
Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, diadiavova. |
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | VB .NET | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |