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 |
Sí |
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)