ID do artigo: 326219 - Última revisão: terça-feira, 20 de maio de 2003 - Revisão: 3.0

PROBLEMA: Erro de exceção System.Arithmetic ao alterar o registro de ponto flutuante de controle em um aplicativo gerenciado

Dica do SistemaEste artigo aplica-se a um sistema operativo diferente do que está a utilizar. Foi desactivado o conteúdo do artigo, que pode não ser relevante para si.

Nesta página

Expandir tudo | Recolher tudo

Sintomas

Quando você altera o registro de controle de ponto flutuante em aplicativos gerenciados, você pode receber mensagens de erro de exceção, como a seguir no Microsoft .NET Framework common language runtime:
Ocorreu uma exceção sem tratamento do tipo 'System.ArithmeticException' em system.windows.forms.dll
Obter informações adicionais: estouro ou estouro negativo na operação aritmética.

Causa

O common language runtime e o .NET Framework pressupõem que o registro de controle de ponto flutuante está definido para o estado padrão.

Resolução

Se um aplicativo gerenciado chamar código não gerenciado deve modificar o registro de controle de ponto flutuante, o código não gerenciado deve retornar o registro de ponto flutuante para seu estado padrão antes de retornar o controle de programa para o aplicativo gerenciado.

Por exemplo, se você usar um sistema Intel, você pode usar a instrução a seguir antes de retornar o controle de programa para o aplicativo gerenciado para redefinir o registro de controle de ponto flutuante:
	_controlfp(_CW_DEFAULT, 0xfffff);
      //See the "Steps to Reproduce the Behavior" section of this article.
				

Situação

Esse comportamento é por design.

Mais Informações

Passos para reproduzir o problema

  1. Inicie o Microsoft Visual Studio NET..
  2. No menu arquivo , clique em novo e, em seguida, clique em Project .
  3. Na caixa de diálogo New Project , clique em Projetos do Visual Basic ou Visual translation from VPE for Csharp projetos em Project Types e clique em Windows Application em modelos . Por padrão, é criado o Form1.
  4. Abra o arquivo .vb ou .cs para ver o código para a função Form1.Main .
  5. Alterar a função Form1.Main de
    
       [STAThread]
       static void Main() 
       {
            Application.Run(new Form1());
       }
    
    					
    para
    
      [DllImport("msvcr70.dll", CallingConvention = CallingConvention.Cdecl)]
          public static extern int _controlfp(int n, int mask);
    
    					
    
       [STAThread]
       static void Main() 
       {
            const int _EM_OVERFLOW = 0x00000004;
            const int _MCW_EM = 0x0008001F;
            _controlfp(_EM_OVERFLOW, _MCW_EM);
            Application.Run(new Form1());
       }
  6. Criar e executar o projeto.

A informação contida neste artigo aplica-se a:
  • Microsoft Common Language Runtime (included with the .NET Framework) 1.0
Palavras-chave: 
kbmt kbprb kbnofix KB326219 KbMtpt
Tradução automáticaTradução automática
IMPORTANTE: Este artigo foi traduzido por um sistema de tradução automática (também designado por Machine Translation ou MT), não tendo sido portanto traduzido ou revisto por pessoas. A Microsoft possui artigos traduzidos por aplicações (MT) e artigos traduzidos por tradutores profissionais, com o objetivo de oferecer em português a totalidade dos artigos existentes na base de dados de suporte. No entanto, a tradução automática não é sempre perfeita, podendo conter erros de vocabulário, sintaxe ou gramática. A Microsoft não é responsável por incoerências, erros ou prejuízos ocorridos em decorrência da utilização dos artigos MT por parte dos nossos clientes. A Microsoft realiza atualizações freqüentes ao software de tradução automática (MT). Obrigado.
Clique aqui para ver a versão em Inglês deste artigo: 326219  (http://support.microsoft.com/kb/326219/en-us/ )
Retired KB ArticleAviso de Isenção de Responsabilidade sobre Conteúdo do KB Aposentado
Este artigo trata de produtos para os quais a Microsoft não mais oferece suporte. Por esta razão, este artigo é oferecido "como está" e não será mais atualizado.