Artigo: 326219 - Última revisão: terça-feira, 20 de Maio de 2003 - Revisão: 3.0

PROBLEMA: Erro de excepção System.Arithmetic quando altera a movimentação de controlo Floating-Point de uma aplicação gerida

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 | Reduzir tudo

Sintomas

Quando altera o registo de controlo de vírgula flutuante aplicações geridas, poderá receber mensagens de erro excepção como a que se segue no Microsoft .NET Framework common language runtime:
Ocorreu uma excepção não processada do tipo 'System.ArithmeticException' no system.windows.forms.dll
Obter informações adicionais: capacidade excedida ou capacidade insuficiente na operação aritmética.

Causa

O common language runtime e .NET Framework partem do princípio que o registo de controlo de vírgula flutuante está definido para o estado predefinido.

Resolução

Se uma aplicação gerida chamadas para código não gerido que tem de modificar o registo de vírgula flutuante de controlo, o código não gerido tem de devolver o registo de vírgula flutuante para o respectivo estado predefinido antes de este devolva controlo do programa para a aplicação gerida.

Por exemplo, se utilizar um sistema Intel, pode utilizar a seguinte instrução antes de devolver controlo do programa para a aplicação gerida para repor o registo de controlo de vírgula flutuante:
	_controlfp(_CW_DEFAULT, 0xfffff);
      //See the "Steps to Reproduce the Behavior" section of this article.
				

Ponto Da Situação

Este comportamento ocorre por predefinição.

Mais Informação

Passos para reproduzir o comportamento

  1. Inicie o Microsoft Visual Studio NET..
  2. No menu ficheiro , clique em Novo e, em seguida, clique em projecto .
  3. Na caixa de diálogo Novo projecto , clique em Projectos do Visual Basic ou Visual C# Projects em tipos de projecto e, em seguida, clique em Aplicação do Windows em modelos . Por predefinição, é criado o Form1.
  4. Abra o ficheiro .cs ou .VB para ver os códigos 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. Crie e execute o projecto.

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 revisto ou traduzido por humanos. A Microsoft tem artigos traduzidos por aplicações (MT) e artigos traduzidos por tradutores profissionais. O objectivo é simples: oferecer em Português a totalidade dos artigos existentes na base de dados do suporte. Sabemos no entanto que a tradução automática não é sempre perfeita. Esta pode conter erros de vocabulário, sintaxe ou gramática? erros semelhantes aos que um estrangeiro realiza ao falar em Português. A Microsoft não é responsável por incoerências, erros ou estragos realizados na sequência da utilização dos artigos MT por parte dos nossos clientes. A Microsoft realiza actualizações frequentes 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 ArticleExclusão de Responsabilidade para Conteúdo sem Suporte na KB
Este artigo foi escrito sobre produtos para os quais a Microsoft já não fornece suporte. Por conseguinte, este artigo é oferecido "tal como está" e deixará de ser actualizado.