Compartir a través de


CA1406: Evite argumentos Int64 para clientes Visual Basic 6

Nombre de tipo

AvoidInt64ArgumentsForVB6Clients

Identificador de comprobación

CA1406

Categoría

Microsoft.Interoperability

Cambio problemático

Motivo

Un tipo marcado específicamente como visible para el Modelo de objetos componentes (COM) declara un miembro que utiliza un argumento System.Int64.

Descripción de la regla

Los clientes COM de Visual Basic 6 no pueden tener acceso a los enteros de 64 bits.

De manera predeterminada, son visibles para COM: ensamblados, tipos públicos, miembros de instancia públicos de tipos públicos y todos los miembros de tipos de valor públicos.Sin embargo, para reducir los falsos positivos, esta regla requiere que la visibilidad del tipo para COM se establezca explícitamente; el ensamblado que contiene se debe marcar con el System.Runtime.InteropServices.ComVisibleAttribute establecido en false y el tipo se tiene que marcar con el ComVisibleAttribute establecido en true.

Cómo corregir infracciones

Para corregir una infracción de esta regla para un parámetro que siempre se pueda expresar como integral de 32 bits, cambie el tipo de parámetro a System.Int32.Si el valor del parámetro podría ser mayor que el valor que se puede expresar como un integral de 32 bits, cambie el tipo de parámetro a System.Decimal.Tenga en cuenta que System.Single y System.Double pierden precisión en los intervalos superiores del tipo de datos Int64.Si no se pretende que este miembro sea visible para COM, márquelo con el atributo ComVisibleAttribute establecido en false.

Cuándo suprimir advertencias

Es seguro suprimir una advertencia de esta regla si tiene la certeza de que los clientes COM de Visual Basic 6 no van a tener acceso al tipo.

Ejemplo

El siguiente ejemplo muestra un tipo que infringe la regla.

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) {} 
   }
}

Reglas relacionadas

CA1413: Evite campos no públicos en tipos de valor visibles para COM

CA1407: Evite miembros estáticos en tipos visibles para COM

CA1017: Marcar los ensamblados con ComVisibleAttribute

Vea también

Referencia

Long (Tipo de datos, Visual Basic)

Otros recursos

Interoperar con código no administrado