1

我有一个 Excel XLL 插件,它会在某些计算机上使 Excel 崩溃。为了排除故障,我在以下位置添加了此调用DllMain

SetUnhandledExceptionFilter(MyExceptionFilter);

和过滤器本身:

LONG WINAPI MyExceptionFilter(struct _EXCEPTION_POINTERS *lpTopLevelExceptionFilter)

但是过滤器永远不会在崩溃时被调用。

4

1 回答 1

0

这是一个老问题,但以防万一这可以帮助其他人:SetUnhandledExceptionFilter()设计不支持使用内部 XLL,引用来自http://www.office-forums.com/threads/setunhandledexceptionfilter-in-的 Microsoft 员工 Jie Wang office-addin.2164345/

您观察到的行为是设计使然。

第 3 方插件/dll 无法为 Office 2007 应用程序设置未处理的异常过滤器(至少不以受支持的方式)。MSO.DLL 明确设置过滤器本身,然后覆盖 API 以防止第 3 方在 MSO 设置过滤器后更改过滤器。它对所有 Office 应用程序(不仅仅是 Outlook)都是通用的。

因此,唯一官方支持的从 Excel 获取故障转储的方法是使用WER

然而,在实践中,使用 MSVC 特定的_set_se_translator()功能确实有效。但它必须从所有应用程序线程中调用,这与 process-global 不同SetUnhandledExceptionFilter()

于 2016-03-17T15:58:55.957 回答