Форум программистов, компьютерный форум, киберфорум
C# .NET
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.95/21: Рейтинг темы: голосов - 21, средняя оценка - 4.95
 Аватар для skilllab
296 / 236 / 58
Регистрация: 03.02.2011
Сообщений: 2,049
Записей в блоге: 1
.NET 4.x

COM потеря контекста. rpc_e_disconnected

29.08.2017, 09:41. Показов 4121. Ответов 15
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Текст ошибки стандартный
COMException was unhandled
The object invoked has disconnected from its clients.
(Exception from HRESULT: 0x80010108 (RPC_E_DISCONNECTED))
Если кто работает с такой штукой, подскажите как отлавливать такое в плане кода?
try-catch на такое пофиг, оно просто не валится в блоке а тупо стопит дебаг.
Потеря происходит так:
- открыто 2 документа в приложении. Одно поверх другого. Развёрнуты.
- есть метод, при смене активного окна (типа OnActiveWindowChange) отрабатывается код.
- одно окно закрываем, соответственно видим то, которое было "под". Но согласно API, в этом случае не происходит смены активности окна, второе просто отображается и всё. И вот в этот-то момент и ловится disconnected на попытке "взять модель окна" (API).

Вообще, если раз 5 нажать продолжить то код всё же просирается и идёт дальше. Но спустя ещё пары таких дисконектов весь COM сервер тупо валится без всего.

Добавлено через 2 минуты
Гугл подсказывает что можно ваще отключить в дебаге показ такого. Типа есть - и фиг с ним. Не видим и ладно. Но это как-то чота не по-людски.
Что странно, до вчерашнего дня я такое ловил только когда реально косячил и в совершенно другом месте. А тут такое.
Погуглив ещё, увидел пару ссылок что это может быть аж ошибка винды и микрософты предлагали чуть ли не обнову-патч поставить. В таком случае - это уже ни в какие ворота
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
29.08.2017, 09:41
Ответы с готовыми решениями:

Потеря контекста
Доброго времени суток. Помогите понять следующий пример: взят от сюда https://learn.javascript.ru/bind var user = { ...

Потеря контекста у переменной
Привет, ранее была проблема с потерей контекста у метода, но обернув его в стрелочную функцию все решилось, но теперь возникла проблема с...

Привязка контекста к {}
Можно привязать контекст к объекту? var obj1 = { prop: 1, method: { set: function () { return...

15
Эксперт .NET
 Аватар для Usaga
14308 / 9389 / 1355
Регистрация: 21.01.2016
Сообщений: 35,409
29.08.2017, 11:00
skilllab, о чём речь? Какой COM сервис использовался? Из всего описанного вообще не очевидно.
0
 Аватар для skilllab
296 / 236 / 58
Регистрация: 03.02.2011
Сообщений: 2,049
Записей в блоге: 1
29.08.2017, 11:51  [ТС]
Usaga, вы о чём?
Выше прям в 5 строке вопрос. Остальное - описание происходящего.

Добавлено через 2 минуты
Цитата Сообщение от Usaga Посмотреть сообщение
Какой COM сервис использовался?

Сервис производства Dassaul Systemes и её дочернего предприятия Solidworks.
А вот тут в ремарке прям описано то что я и написал выше
http://help.solidworks.com/201... ndler.html
0
Эксперт .NET
 Аватар для Usaga
14308 / 9389 / 1355
Регистрация: 21.01.2016
Сообщений: 35,409
29.08.2017, 11:56
Цитата Сообщение от skilllab Посмотреть сообщение
Сервис производства Dassaul Systemes и её дочернего предприятия Solidworks.
C этого и надо было начинать.

Я с продукцией этой фирмы не сталкивался. МОжет быть всё дело в этом:
Цитата Сообщение от skilllab Посмотреть сообщение
одно окно закрываем, соответственно видим то, которое было "под". Но согласно API, в этом случае не происходит смены активности окна, второе просто отображается и всё. И вот в этот-то момент и ловится disconnected на попытке "взять модель окна" (API).
Модель какого окна вы взять пытаетесь?
0
 Аватар для skilllab
296 / 236 / 58
Регистрация: 03.02.2011
Сообщений: 2,049
Записей в блоге: 1
29.08.2017, 12:32  [ТС]
То, которое было под закрытым. Но судя, блин, по дебагу, COM сервер во время закрытия перебирает ВСЕ окна. И получается что на данном методе (ссылка выше) в какой то момент времени я пытаюсь взять типа как модель закрывающегося окна. Точней COM сервер отдаёт модель закрывающегося окна. Как и писал выше, если пару тройку раз жмакнуть "продолжить", я всё же прихожу к окну, которое было под закрывающимся и код отрабатывает и продолжается.
Написать ещё раз вопрос? )))
подскажите как отлавливать такое в плане кода?
Ибо try-catch не отлавливает такой тип ошибки. Код просто (без точек останова) останавливается в блоке try и Visual Studio прерывает сама выполнение. Еслиб можно было отловить, я бы обработал соответствующе.

Добавлено через 1 минуту
Цитата Сообщение от Usaga Посмотреть сообщение
C этого и надо было начинать.
Нет. Начал я как раз с того, с чего надо было.
0
Эксперт .NET
 Аватар для Usaga
14308 / 9389 / 1355
Регистрация: 21.01.2016
Сообщений: 35,409
29.08.2017, 12:37

Не по теме:

Цитата Сообщение от skilllab Посмотреть сообщение
Нет. Начал я как раз с того, с чего надо было.
Много у каких программ есть свой COM-сервер. То, что вы подняли вопрос про COM-сервер конкретики не придаёт вопросу.



Цитата Сообщение от skilllab Посмотреть сообщение
Ибо try-catch не отлавливает такой тип ошибки. Код просто (без точек останова) останавливается в блоке try и Visual Studio прерывает сама выполнение. Еслиб можно было отловить, я бы обработал соответствующе.
Это обычное поведение студии. Его можно отключить либо для всех исключений, либо для конкретных. При запуске вне студии такого не будет.

Вообще, это конкретная особенность именно данного COM-сервера, так что тут общих рекомендаций дать сложно.

Добавлено через 56 секунд
Может в API есть метод для подписки на событие закрытия окна?
0
 Аватар для skilllab
296 / 236 / 58
Регистрация: 03.02.2011
Сообщений: 2,049
Записей в блоге: 1
29.08.2017, 12:42  [ТС]
Цитата Сообщение от Usaga Посмотреть сообщение
При запуске вне студии такого не будет.
Это и ссыкотно. Ибо если COM сервер будет тупо валиться - виноват я окажусь)) Как только отключат мой аддон - падение прекратится.
Цитата Сообщение от Usaga Посмотреть сообщение
метод для подписки на событие закрытия окна?
Есть, но вот вчера мне не удалось попасть в это событие))) может закрываю как-то не так? (риторический)

Добавлено через 1 минуту
Usaga, дался вам этот сервер. На конкретный вопрос есть что посоветовать?
0
Эксперт .NET
 Аватар для Usaga
14308 / 9389 / 1355
Регистрация: 21.01.2016
Сообщений: 35,409
29.08.2017, 12:47
Цитата Сообщение от skilllab Посмотреть сообщение
Это и ссыкотно. Ибо если COM сервер будет тупо валиться - виноват я окажусь)) Как только отключат мой аддон - падение прекратится.
Нет. Я о том, что вне студии исключение будет перехватываться блоком try\catch. Это и в студии можно сделать отключив отлов исключений отладчиком.

Цитата Сообщение от skilllab Посмотреть сообщение
дался вам этот сервер. На конкретный вопрос есть что посоветовать?
Да дался. COM-сервер - механизм взаимодействия с другим приложением. В данном случае с Solidworks. Подобное поведение - особенность именно Solidworks. Т.е. это не связанно с самой технологией COM.
0
 Аватар для skilllab
296 / 236 / 58
Регистрация: 03.02.2011
Сообщений: 2,049
Записей в блоге: 1
29.08.2017, 13:03  [ТС]
Цитата Сообщение от Usaga Посмотреть сообщение
Подобное поведение
Причем тут поведение? ))) Мы ж в разделе программирования на языке C#. И вопрос мой касается программирования на языке C#. Вопрос в первом сообщении темы, а именно в 5 и 6 по счёту строчках. Там в этих двух строчках есть хоть что-нибудь чтобы намекало на что-то отличное от программирования на языке C#?

Цитата Сообщение от Usaga Посмотреть сообщение
вне студии исключение будет перехватываться блоком try\catch
т.е. при дебаге в Visual Studio исключение НЕ перехватывается, а блин где-то у кого-то в рабочее время и на рабочем аддоне оно перехватится?

Добавлено через 2 минуты
Цитата Сообщение от Usaga Посмотреть сообщение
Это и в студии можно сделать отключив отлов исключений отладчиком.
В студии можно нажать какую-то галку, и код станет нормально обрабатываться в блоке try-catch при указанной в первом сообщении ошибке?
0
Эксперт .NET
 Аватар для Usaga
14308 / 9389 / 1355
Регистрация: 21.01.2016
Сообщений: 35,409
29.08.2017, 13:41
Цитата Сообщение от skilllab Посмотреть сообщение
Причем тут поведение? ))) Мы ж в разделе программирования на языке C#. И вопрос мой касается программирования на языке C#. Вопрос в первом сообщении темы, а именно в 5 и 6 по счёту строчках. Там в этих двух строчках есть хоть что-нибудь чтобы намекало на что-то отличное от программирования на языке C#?
Причём тут всё это? Отладчик студии перехватывает выбрасываемые исключения. Это можно отключить. Или нажать F5 и продолжить выполнение программы с последующим перехватом исключения. C# этому механизму ортогонален.
Миниатюры
COM потеря контекста. rpc_e_disconnected  
0
 Аватар для skilllab
296 / 236 / 58
Регистрация: 03.02.2011
Сообщений: 2,049
Записей в блоге: 1
29.08.2017, 14:13  [ТС]
Цитата Сообщение от Usaga Посмотреть сообщение
Это можно отключить.
как-то не складывается чтение постов, да? ))
Цитата Сообщение от skilllab Посмотреть сообщение
Гугл подсказывает что можно ваще отключить в дебаге показ такого. Типа есть - и фиг с ним. Не видим и ладно. Но это как-то чота не по-людски.
0
Эксперт .NET
 Аватар для Usaga
14308 / 9389 / 1355
Регистрация: 21.01.2016
Сообщений: 35,409
29.08.2017, 14:36
Цитата Сообщение от skilllab Посмотреть сообщение
как-то не складывается чтение постов, да? ))
Складывается. Это вы сегодня что-то не в настроении спокойно и нормально общаться.

Перехват исключений отключается только в отладчике VS. Само приложение спокойно будет перехватывать исключения. Это просто механизм для удобной отладки. Хватает исключения в месте возникновения, до того, как за него возьмётся само приложение и позволяет исследовать контекст ошибки.

Он по-умолчанию включен, ибо в 90% он удобен. Если вам это мешает, то можно и вырубить, но на само разрабатываемое приложение это эффекта не окажет.

Добавлено через 2 минуты
Я это к тому, что ваше приложение корректно "поймает" исключение, если работа с COM идёт в блоке try\catch. Другое дело, что причину нужно искать на форумах Solidworks (или аналогичных, специализированных), ибо она уже лежит вне студии, C# и COM.

Добавлено через 14 минут
skilllab, если вы всё ещё не поняли, то я прямо ответил вам на ваш вопрос:

Цитата Сообщение от skilllab Посмотреть сообщение
Если кто работает с такой штукой, подскажите как отлавливать такое в плане кода?
try-catch на такое пофиг, оно просто не валится в блоке а тупо стопит дебаг.
а) Отладчик перехватывает исключение, но не забирает его у приложения, можно нажать F5 и исключение будет передано дальше;
б) Такое поведение отладчика можно отключить;
в) Приложение запущенное вне студии будет перехватывать исключение, ибо оно - самое обычное (System.Runtime.InteropServices.COMExcep tion, унаследовано от System.Exception);
0
 Аватар для skilllab
296 / 236 / 58
Регистрация: 03.02.2011
Сообщений: 2,049
Записей в блоге: 1
29.08.2017, 18:44  [ТС]
Цитата Сообщение от Usaga Посмотреть сообщение
а) Отладчик перехватывает исключение, но не забирает его у приложения, можно нажать F5 и исключение будет передано дальше;
как же сложно то с вами
https://www.youtube.com/watch?v=xayOfynEZzs
0
Эксперт .NET
 Аватар для Usaga
14308 / 9389 / 1355
Регистрация: 21.01.2016
Сообщений: 35,409
30.08.2017, 01:44
Цитата Сообщение от skilllab Посмотреть сообщение
как же сложно то с вами
Странно. У меня всё работает: https://youtu.be/xz48eVONpo8

Эксперимент произведён с 2GIS. На видео курсор отображается не там, где он был при записи (наркомания какая-то, видимо из-за наличия второго монитора ultra wide формата).

Код:
Кликните здесь для просмотра всего текста

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
using System;
using GrymCore;
 
namespace OtherConsoleExperiments
{
    class Program
    {
        static void Main(string[] args)
        {
            IGrym grym = new GrymClass();
            var itor = grym.BaseCollection.GetBaseIterator();
 
            IBaseReference firstReference = itor.GetNext();
 
            var view = grym.GetBaseView(firstReference);
            Console.WriteLine("Window shown");
            Console.ReadKey();
 
            try
            {
                var mapPoint = view.Frame.Map.GetMapVisibleRect();
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.Message);
            }
 
            Console.WriteLine("Done");
            Console.ReadKey();
        }
    }
}
0
 Аватар для skilllab
296 / 236 / 58
Регистрация: 03.02.2011
Сообщений: 2,049
Записей в блоге: 1
30.08.2017, 06:45  [ТС]
Usaga, ну так а мне то что делать? Переставить винду, студию и COM сервер?
Или тупо заигнорить свой баг и кодить дальше?

Добавлено через 1 минуту
И вопрос всётаки остался.
Я виноват или кто-то другой?
0
Эксперт .NET
 Аватар для Usaga
14308 / 9389 / 1355
Регистрация: 21.01.2016
Сообщений: 35,409
30.08.2017, 06:57
Цитата Сообщение от skilllab Посмотреть сообщение
Или тупо заигнорить свой баг и кодить дальше?
Это не ваш баг. Ну, если вы правильно поняли документацию на API.

Проверьте работу своего приложения вне отладчика студии. Убедитесь, что ошибка отлавливается уверенно и приложение не падает. Если всё нормально и возможно корректно работать дальше, то возьмите этот момент на заметку (в виде TODO), что нужно исправить, и забудьте навсегда.

Так же, можете завести отдельный мини-проектик, чисто для воспроизведения проблемы и на нём поэкпериментировать. Но пример, что я в видео выложил показывает, что далеко не всё от вашего кода зависит...

Добавлено через 4 минуты
Я немного пошарился по жалобам пользователей в сети на ошибки при работе с SolidWorks через COM. Судя по всему, подобное (и иные ошибки) встречается часто и по разным причинам: то модель в документе где-то некорректное значение имеет, то ещё чего-то в ней не так.

Если сможете сделать минималистичный проект воспроизводящий проблему, то с этим кодом можно будет обратиться на какой-нибудь забугорный форум solidworks или даже в техподдержку.
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
30.08.2017, 06:57
Помогаю со студенческими работами здесь

Lifetime контекста
Как у вас в крупных проектах на ASP.MVC живёт контекст базы данных? То есть пока всё просто и общение с базой вынесено в отдельный слой, то...

Подгруздка контекста.
Подгружаю контекст в див с помощью аякса. $(document).ready(function(){ $.ajax({ type: "POST", ...

Получение контекста!
Здавствуйте участники форума! :) На повестке возник такой вопрос. Обрисую ситуацию-> Есть класс, унаследованный от родителя,...

Замена пользовательского контекста
Здравствуйте. Требуется выполнить программу ls. Сделать нужно через заменц пользовательского контекста ( использую exec и его модификации)....

Цена контекста в Японии
Если я не ошибаюсь, клики в америке и в европе порой стоят значительно дороже наших, отчественных. В связи с этим возникает вопрос: на...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
16
Ответ Создать тему
Новые блоги и статьи
Как я обхитрил таблицу Word
Alexander-7 21.03.2026
Когда мигает курсор у внешнего края таблицы, и нам надо перейти на новую строку, а при нажатии Enter создается новый ряд таблицы с ячейками, то мы вместо нервных нажатий Энтеров мы пишем любые буквы. . .
Krabik - рыболовный бот для WoW 3.3.5a
AmbA 21.03.2026
без регистрации и смс. Это не торговля, приложение не содержит рекламы. Выполняет свою непосредственную задачу - автоматизацию рыбалки в WoW - и ничего более. Однако если админы будут против -. . .
Программный отбор значений справочника
Maks 21.03.2026
Установка программного отбора значений справочника "Сотрудники" из модуля формы документа. В качестве фильтра для отбора служит предопределенное значение перечислений. Процедура. . .
Переходник USB-CAN-GPIO
Eddy_Em 20.03.2026
Достаточно давно на работе возникла необходимость в переходнике CAN-USB с гальваноразвязкой, оный и был разработан. Однако, все меня терзала совесть, что аж 48-ногий МК используется так тупо: просто. . .
Оттенки серого
Argus19 18.03.2026
Оттенки серого Нашёл в интернете 3 прекрасных модуля: Модуль класса открытия диалога открытия/ сохранения файла на Win32 API; Модуль класса быстрого перекодирования цветного изображения в оттенки. . .
SDL3 для Desktop (MinGW): Рисуем цветные прямоугольники с помощью рисовальщика SDL3 на Си и C++
8Observer8 17.03.2026
Содержание блога Финальные проекты на Си и на C++: finish-rectangles-sdl3-c. zip finish-rectangles-sdl3-cpp. zip
Символические и жёсткие ссылки в Linux.
algri14 15.03.2026
Существует два типа ссылок — символические и жёсткие. Ссылка в Linux — это запись в каталоге, которая может указывать либо на inode «файла-ИСТОЧНИКА», тогда это будет «жёсткая ссылка» (hard link),. . .
[Owen Logic] Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора
ФедосеевПавел 14.03.2026
Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора ВВЕДЕНИЕ Выполняя задание на управление насосной группой заполнения резервуара,. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru