2013-04-18 2 views
1

У меня есть Excel XLL addin, который вызывает сбои Excel на некоторых компьютерах. Для устранения неисправностей я добавил этот вызов в DllMain:Создать minidump из Excel XLL

SetUnhandledExceptionFilter(MyExceptionFilter); 

и сам фильтр:

LONG WINAPI MyExceptionFilter(struct _EXCEPTION_POINTERS *lpTopLevelExceptionFilter) 

Но фильтр никогда не вызывается на аварии.

+0

Excel, вероятно, переопределяет это где-то - возможно, вы можете использовать 'OutputDebugString()' для получения некоторой диагностики для 'DebugView' или аналогичного? –

+0

Я делаю патч, как в примере здесь http://www.debuginfo.com/examples/src/debugfilters/EnforceFilter.cpp – SparcU

+0

Хорошо, но что, если Excel сделал то же самое, прежде чем он загрузил ваш XLL? Я не знаю, если это так, но это одна из возможных причин, почему ваш фильтр не может быть вызван. –

ответ

0

Это старый вопрос, но только в том случае, если это может помочь кому-то: использование SetUnhandledExceptionFilter() внутри XLLs не поддерживается конструкцией, со ссылкой на сотрудника Microsoft Цзе Ван из http://www.office-forums.com/threads/setunhandledexceptionfilter-in-office-addin.2164345/

поведение вы наблюдали это по дизайн.

Сторонние дополнения/DLL не могут установить необработанный фильтр исключений для приложений Office 2007 (по крайней мере, не поддерживаемый). MSO.DLL явно устанавливает сам фильтр , затем переопределяет API, чтобы предотвратить третьи стороны для изменения фильтра после того, как MSO установил его. Он распространен для всех приложений Office (а не просто Outlook).

Таким образом, единственным официально поддерживаемым методом получения аварийных дампов из Excel является использование WER.

На практике, используя MSVC-специфический _set_se_translator() функция действительно работает. Но он должен быть вызван из всех прикладных потоков, в отличие от глобального процесса SetUnhandledExceptionFilter().

+0

Благодарим вас за ответ. Но, к сожалению, даже _set_se_translator не работал для меня для Excel addin. – SparcU

+0

Есть ли какие-либо трюки, чтобы сделать работу _set_se_translator? – SparcU

+0

FWIW Мне не нужно было ничего особенного, чтобы заставить его работать. Но может быть разница в версиях Excel, платформах, 32 и 64 бит, поэтому, возможно, это не работает во всех комбинациях этих. –

Смежные вопросы