Compartir a través de


Evite argumentos Int64 para clientes de Visual Basic 6

Actualización: noviembre 2007

     TypeName

AvoidInt64ArgumentsForVB6Clients

Identificador de comprobación

CA1406

Category

Microsoft.Interoperability

Cambio problemático

Motivo

Un tipo marcado específicamente como visible para 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

Evitar los campos no públicos en los tipos de valor de ComVisible

Evitar miembros estáticos en tipos visibles para COM

Marcar los ensamblados con ComVisibleAttribute

Vea también

Referencia

Long (Tipo de datos, Visual Basic)

Otros recursos

Interoperar con código no administrado