Не работает IErrorLog в 1С
От: HowardLovekraft  
Дата: 09.07.10 14:35
Оценка:
Привет.

Есть 1С-addin, писанный на шарпе.
Все замечательно работает кроме одного момента — хочу перехватить .NET-исключение и передать его в 1С для того, чтобы остановить выполнение 1С-ного модуля ну и отобразить исключение в окне сообщений. Для этого использую IErrorLog, который прекрасно работает в неуправляемых addin'ах:
    [Guid("3127CA40-446E-11CE-8135-00AA004BB851")]
    [InterfaceType(ComInterfaceType.InterfaceIsIUnknown)]
    public interface IErrorLog
    {
        void AddError(String pszPropName, System.Runtime.InteropServices.ComTypes.EXCEPINFO pExepInfo);
    }

        public void Init(Object connection)
        {
            Connection = connection;
            ErrorLog = (IErrorLog)Connection;
        }

        protected void PostException(Exception ex)
        {
            if (ErrorLog == null)
                return;

            var info = new EXCEPINFO
            {
                wCode = 1006,
                bstrDescription = String.Format(_addinError, ex.GetType(), ex.Message, ex.StackTrace),
                bstrSource = AddInName,
                scode = 1
            };

            ErrorLog.AddError("", info);
        }

На вызове ErrorLog.AddError получаю AccessViolation, 1С это спокойно проглатывает и радостно работает дальше.
Более того, если просто выбросить в .NET-коде необработанное исключение, 1С пофигу, хотя даже б-гмерзкий Delphi в этом случае падает с OLE-шным исключением.

Проверял на версиях платформы 7.7 и 8.2.
Перепробовал все распостранненые в интернетах примеры 1С-ных addin'ов, определений IErrorLog и структуры EXCEPINFO. Результат один и тот же.
На GDN'не нашелся один счастливец, столкнувшийся с этой проблемой, решивший ее и запостивший исходник с решением на сервер, откуда его уже благополучно удалили.

Какие есть идеи?
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.