CA1406: Evite argumentos de Int64 para os clientes Visual Basic 6
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 os inteiros de 64 bits.
Por padrão, é visível para COM o seguinte: assemblies, tipos públicos, os 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 determinados 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: Evitar os tipos de valor visível COM campos não públicos
CA1407: Evite membros estáticos em tipos de visíveis COM
CA1017: Assemblies de marca com ComVisibleAttribute
Consulte também
Referência
Tipo de dados Long (Visual Basic)