Partager via


CA1406 : Éviter les arguments Int64 pour les clients Visual Basic 6

TypeName

AvoidInt64ArgumentsForVB6Clients

CheckId

CA1406

Catégorie

Microsoft.Interoperability

Modification avec rupture

Oui

Cause

Un type marqué spécifiquement comme étant visible dans COM (Component Object Model) déclare un membre qui accepte un argument Int64.

Description de la règle

Les clients COM Visual Basic 6 ne peuvent pas accéder aux entiers de 64 bits.

Par défaut, les éléments suivants sont visibles par le modèle COM : assemblys, types publics, membres d'instances publics dans des types publics, et tous les membres de types valeur publics.Toutefois, pour limiter les faux positifs, cette règle requiert que la visibilité COM du type soit déclarée explicitement ; l'assembly contenant doit être marqué avec ComVisibleAttribute ayant la valeur false et le type doit être marqué avec ComVisibleAttribute ayant la valeur true.

Comment corriger les violations

Pour corriger une violation de cette règle pour un paramètre dont la valeur peut toujours être exprimée comme un intégral de 32 bits, remplacez le type de paramètre par Int32.Si la valeur du paramètre peut être plus grande que la valeur pouvant être exprimée comme un intégral de 32 bits, remplacez le type de paramètre par Decimal.Notez que Single et Double perdent en précision dans les plages supérieures du type de données Int64.Si le membre ne doit pas être visible dans COM, marquez-le avec ComVisibleAttribute qui a la valeur false.

Quand supprimer les avertissements

Il est possible de supprimer sans risque un avertissement de cette règle s'il est certain que les clients COM Visual Basic 6 n'accèdent pas au type.

Exemple

L'exemple suivant présente un type qui enfreint la règle.

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

Règles connexes

CA1413 : Éviter les champs non publics dans les types valeur visibles par COM

CA1407 : Éviter les membres statiques dans les types visibles par COM

CA1017 : Marquer les assemblys avec ComVisibleAttribute

Voir aussi

Référence

Long, type de données (Visual Basic)

Autres ressources

Interopération avec du code non managé