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)