É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)