Partager via


Éviter les arguments Int64 pour les clients Visual Basic 6

Mise à jour : novembre 2007

TypeName

AvoidInt64ArgumentsForVB6Clients

CheckId

CA1406

Catégorie

Microsoft.Interoperability

Modification avec rupture

Oui

Cause

Un type marqué spécifiquement comme étant visible dans COM déclare un membre qui accepte un argument System.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 System.Runtime.InteropServices.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 System.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 System.Decimal. Notez que System.Single et System.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 affiche 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

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

Éviter les membres statiques dans les types visibles par COM

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é