Compartilhar via


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

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 inteiros de 64 bits.

Por padrão, a seguir estão visível para COM: assemblies, tipos públicos, 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 estiver certo de que os 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: Evite campos não públicos em tipos de valor visível COM

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

CA1017: Marcar assemblies com ComVisibleAttribute

Consulte também

Referência

Tipo de dado Long (Visual Basic)

Outros recursos

Interoperar com código não gerenciado