CA1406: Evitar los argumentos Int64 en clientes Visual Basic 6

Elemento Valor
RuleId CA1406
Category Microsoft.Interoperability
Cambio importante Problemático

Causa

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

Nota

Esta regla está en desuso. Para más información, consulte Reglas en desuso.

Descripción de la regla

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

De forma predeterminada, los siguientes elementos son visibles para COM: ensamblados, tipos públicos, miembros de instancia pública en tipos públicos y todos los miembros de tipos de valor público. Sin embargo, para reducir los falsos positivos, esta regla requiere que se indique explícitamente la visibilidad COM del tipo; el ensamblado contenedor debe marcarse con System.Runtime.InteropServices.ComVisibleAttribute establecido en false y el tipo debe marcarse con ComVisibleAttribute establecido en true.

Cómo corregir infracciones

Para corregir una infracción de esta regla para un parámetro cuyo valor siempre se puede expresar como un entero de 32 bits, cambie el tipo de parámetro a System.Int32. Si existe la posibilidad de que el valor del parámetro sea mayor de lo que se puede expresar como un entero de 32 bits, cambie el tipo de parámetro a System.Decimal. Tenga en cuenta que tanto System.Single como System.Double pierden precisión en los intervalos superiores del tipo de datos Int64. Si el miembro no está pensado para ser visible en COM, márquelo con ComVisibleAttribute establecido en false.

Cuándo suprimir las advertencias

Es seguro suprimir una advertencia de esta regla si está seguro de que los clientes COM de Visual Basic 6 no tendrán acceso al tipo.

Ejemplo

En el ejemplo siguiente se muestra un tipo que infringe la regla.

using System;
using System.Runtime.InteropServices;

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

CA1413: Evitar los campos no públicos en tipos de valor visibles a través de COM

CA1407: Evitar los miembros estáticos en tipos visibles a través de COM

CA1017: Marcar los ensamblados con ComVisibleAttribute

Vea también