|
![]() |
#1 |
Участник
|
А фиг знает, может, и из той же. Сейчас вот вылечился экспорт данных в Excel через ComExcelDocument_RU, который, зараза, валился буквально от любого чиха: мышкой не туда ткнешь - и привет. Вылечилось обрамлением шаманскими макросами вызовов методов COM-объектов в методах findRange, getWorkSheet, insertValueInRange.
|
|
![]() |
#2 |
Участник
|
Цитата:
Сообщение от gl00mie
![]() Сейчас вот вылечился экспорт данных в Excel через ComExcelDocument_RU, который, зараза, валился буквально от любого чиха: мышкой не туда ткнешь - и привет. Вылечилось обрамлением шаманскими макросами вызовов методов COM-объектов в методах findRange, getWorkSheet, insertValueInRange.
![]() |
|
![]() |
#3 |
Участник
|
Цитата:
Вот код макроса EndSafeCall_RU : X++: // %1 retry count by default 4 // %2 time out by default 250 // %3 exception type by default Exception::Error #ifnot.empty(%1) #define.safeCallRetryCount(%1) #endif #if.empty(%1) #define.safeCallRetryCount(4) #endif #ifnot.empty(%2) #define.safeCallTimeOut(%2) #endif #if.empty(%2) #define.safeCallTimeOut(250) #endif #ifnot.empty(%3) #define.safeCallExceptionType(%3) #endif #if.empty(%3) #define.safeCallExceptionType(Exception::Error) #endif catch (#safeCallExceptionType) { if (xSession::currentRetryCount() >= #safeCallRetryCount) { throw #safeCallExceptionType; } else { #define.safeCallNotifyMethod('notify') infolog.clear(0); infolog.addTimeOut(infolog, #safeCallNotifyMethod, #safeCallTimeOut); infolog.wait(); retry; } } X++: try ![]() Может лучше копать в сторону "однопоточного" запуска, предложенного AndreyStar ? Кто знает как это делать ? Через thread ? Но это ведь тоже определенное извращение... |
|
|
За это сообщение автора поблагодарили: S.Kuskov (1). |
Теги |
com-объект, excel, thread, асинхронный com, ошибка |
|
|