Conflito com o Oracle SmartView: O Excel falha aparentemente de modo aleatório
Problema
Eu tenho think-cell e Oracle SmartView instalados. Em algum ponto enquanto trabalhando no Excel, eu recebo uma mensagem de erro CRITICALWITHMSG n/a: std::terminate()
e o Excel falha.
Os usuários relataram que o problema acontece em diversas situações, por exemplo, ao tentar:
- atualizar dados usando SmartView
- conectar-se ao ambiente do Oracle
- inserir valor digitando em uma célula
- excluir o conteúdo de uma célula do Oracle SmartView, por exemplo, pressionando BACKSPACE
Análise
Em nossa análise, parece que a Oracle não está lidando com algumas exceções em seu código. Esse não é um comportamento suportado e pode levar a uma falha do Excel:
HSADDIN.DLL (que pertence ao SmartView) chama Excel::Window::PointsToScreenPixelsX
dentro de um callback WM_TIMER
, e essa chamada falha quase que frequentemente com VBA_E_IGNORE
. Esse HRESULT
é envolvo em uma exceção _com_error
pelo COM call wrapper, mas não é manipulado e cai no mecanismo de despacho WM_TIMER
do Windows. Deixar as exceções escaparem do código do aplicativo não é permitido, então uma falha é esperada.
Por padrão, entretanto, o WM_TIMER
mecanismo de despacho contém um bloco catch-all __try __except
, que detecta a exceção e silencia qualquer consequência. Mais recentemente, o Office 365 tem um ambiente controlado pela Microsoft chamado Microsoft.Office.AppHost.ExposeTimerProcSeh
, que faz o Excel seguir a instrução da própria Microsoft e desativar o bloco catch-all __try __except
descrito acima chamando a função Win32 API SetUserObjectInformationW(..., UOI_TIMERPROC_EXCEPTION_SUPPRESSION, ...)
. Isso faz o Excel falhar quando a exceção ocorre.
Não sabemos quando a Microsoft permite essa configuração, mas temos visto ela ativada em máquinas onde o erro ocorre. Se o think-cell for instalado, ele detectará a exceção por acidente e mostrará uma mensagem de erro. É quase certo que tudo isso não foi intencional pela Oracle, e eles simplesmente se esqueceram de lidar com VBA_E_IGNORE
em seu suplemento.
Solução
Clientes afetados relataram que a atualização para o Oracle SmartView na versão 21.200 corrige o problema. Se isso não ajudar, entre em contato com o suporte do Oracle SmartView para obter mais informações.