|
Исключение из COM на C# | ☑ | ||
---|---|---|---|---|
0
oleg_km
29.03.14
✎
13:01
|
Есть COM на C#, используемый в 1С. Хочу из кода этого объекта создать исключение 1С. Просто throw завершает 1С. Или для этого нужно писать ВК?
|
|||
1
H A D G E H O G s
29.03.14
✎
13:10
|
(0)
Все код процедуры COM объекта берем в try/except Где - то внутри возбуждаем свое собственное исключение. Выполнение переходит в блок except (при любом исключении). Если это - твое исключение - процедура возвращает в 1С ЛОЖЬ, 1С читает КодОшибки и ОписаниеОшибки из свойства COM объекта. При начале выполнения COM процедуры, она сбрасывает переменные, хранящие Код и Описание ошибки (предыдущие) |
|||
2
oleg_km
29.03.14
✎
13:19
|
(1) Не все так просто. Процедура, это событие. Причем событие генерится внутри COM. В 1С ссылки на этот объект уже нет, например форма уже закрыта. Чувствую, что наверное хочу невозможного.
|
|||
3
Serginio1
08.04.14
✎
11:29
|
Сделай ВК. Вернее передай в свой COM AppDispatch из которого вытащи IErrorLog
Для сообщения пользователю информации о своей работе объект может использовать интерфейс IErrorLog, стандартный для OLE (описание метода AddError интерфейса IErrorLog приводится здесь исключительно для удобства работы). Возникающие сообщения обработываются как в течение работы программы (при асинхронном помещении их в очередь), так и в следующих случаях: при возврате из метода инициализации Init ( см. стр. * ) и при возврате из метода расширения . Все сообщения помещаются в очередь и обрабатываются по порядку появления. Количество запоминаемых сообщений не ограничено. HRESULT AddError(BSTR pszPropName, LPEXCEPINFO pExcepInfo) Добавить сообщение. Параметры: pszPropName В настоящей реализации параметр pszPropName игнорируется. pExcepInfo Указатель на структуру EXCEPINFO . |
|||
4
Serginio1
08.04.14
✎
11:30
|
Или из AppDispatch пиши в журнал регистрации
|
|||
5
Serginio1
08.04.14
✎
12:01
|
||||
6
oleg_km
08.04.14
✎
17:19
|
ВК не хочется, хочется, чтобы события были ограниченны формой, владельцем ActiveX. Ладно, пока не особо актуально
|
|||
7
Serginio1
08.04.14
✎
17:29
|
(6) Так ты сделай ВК из которой будешь добывать AppDispatch и передавать её в свой COM объект.
Я например уже 13 лет пользуюсь ВК которая загружает Объект Автоматизации поддерживающий ITypeInfo и выполняет все его свойства и методы через IlanguageExtender. http://1c.proclub.ru/modules/mydownloads/personal.php?cid=115&lid=2019 В самом COM объекте нужно только добавить метод void InitFrom1C(object Object1C) например public void InitFrom1C(object Object1C) { try { Event = new AutoResetEvent(false); EventTo1C = Object1C as IAsyncEvent; SynchronizationContext.SetSynchronizationContext(new WindowsFormsSynchronizationContext()); Sc = SynchronizationContext.Current; } catch (Exception e) { MessageBox.Show(e.ToString()); throw e; } // обработкаСобытий(); } Помню еще на 7 ке я просто возвращал Object1C в 1С и использовал его обычных сом объектах |
|||
8
oleg_km
08.04.14
✎
17:44
|
(8) А, да так можно сделать. Буду иметь ввиду
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |