Partilhar via


CA1406: Evite argumentos de Int64 para os clientes Visual Basic 6

TypeName

AvoidInt64ArgumentsForVB6Clients

CheckId

CA1406

<strong>Categoria</strong>

Microsoft.Interoperability

Alteração significativa

Quebrando

Causa

Um tipo que está marcado como visível para o modelo de objeto componente (COM) especificamente declara um membro que utiliza um System.Int64 argumento.

Descrição da regra

Clientes COM 6 de Visual Basic não podem acessar os inteiros de 64 bits.

Por padrão, é visível para COM o seguinte: assemblies, tipos públicos, os membros de instância pública em tipos públicos e todos os membros de tipos de valor público. No entanto, para reduzir os falsos positivos, esta regra exige a visibilidade de COM do tipo a ser declarado explicitamente; o assembly contendo deve ser marcado com o System.Runtime.InteropServices.ComVisibleAttribute definido como false e o tipo deve ser marcado com o ComVisibleAttribute definido como true.

Como corrigir violações

Para corrigir uma violação desta regra para um parâmetro cujo valor sempre pode ser expresso como um inteiro de 32 bits, altere o tipo de parâmetro para System.Int32. Se o valor do parâmetro pode ser maior do que pode ser expresso como um inteiro de 32 bits, altere o tipo de parâmetro para System.Decimal. Observe que ambos System.Single e System.Double perder precisão em intervalos de superiores a Int64 tipo de dados. Se o membro não deve ser visível para COM, marcá-lo com o ComVisibleAttribute definido como false.

Quando suprimir avisos

É seguro eliminar um aviso esta regra se determinados clientes COM 6 de Visual Basic não acessará o tipo.

Exemplo

O exemplo a seguir mostra um tipo que viola a regra.

Imports System
Imports System.Runtime.InteropServices

<Assembly: ComVisibleAttribute(False)>
Namespace InteroperabilityLibrary

   <ComVisibleAttribute(True)> _ 
   Public Class SomeClass

      Public Sub LongArgument(argument As Long)
      End Sub

   End Class

End Namespace
using System;
using System.Runtime.InteropServices;

[assembly: ComVisible(false)]
namespace InteroperabilityLibrary
{
   [ComVisible(true)]
   public class SomeClass
   {
      public void LongArgument(long argument) {} 
   }
}

Regras relacionadas

CA1413: Evitar os tipos de valor visível COM campos não públicos

CA1407: Evite membros estáticos em tipos de visíveis COM

CA1017: Assemblies de marca com ComVisibleAttribute

Consulte também

Referência

Tipo de dados Long (Visual Basic)

Outros recursos

Interoperação com Código Não Gerenciado