Base de conhecimento KB0236

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.

mensagem de erro do think-cell

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.

Compartilhe