Vermeiden von Int64-Argumenten für Visual Basic 6-Clients
Aktualisiert: November 2007
TypeName |
AvoidInt64ArgumentsForVB6Clients |
CheckId |
CA1406 |
Kategorie |
Microsoft.Interoperability |
Unterbrechende Änderung |
Breaking |
Ursache
Ein Typ, der ausdrücklich als für COM sichtbar markiert ist, deklariert einen Member, der ein System.Int64-Argument akzeptiert.
Regelbeschreibung
Visual Basic 6-COM-Clients können nicht auf 64-Bit-Ganzzahlen zugreifen.
Standardmäßig sind folgende Programmierelemente für COM sichtbar: Assemblys, öffentliche Typen, öffentliche Instanzmember in öffentlichen Typen und alle Member öffentlicher Werttypen. Um jedoch die Anzahl falscher positiver Ergebnisse zu verringern, muss entsprechend der Regel die COM-Sichtbarkeit des Typs explizit angegeben werden, die enthaltende Assembly muss mit dem auf false festgelegten System.Runtime.InteropServices.ComVisibleAttribute-Attribut markiert sein, und der Typ muss mit dem auf true festgelegten ComVisibleAttribute-Attribut markiert sein.
Behandlung von Verstößen
Um einen Verstoß gegen diese Regel für einen Parameter, dessen Wert immer als 32-Bit-Ganzzahl ausgedrückt werden kann, zu beheben, ändern Sie den Parametertyp in System.Int32. Wenn der Wert des Parameters größer sein darf, als mit einer 32-Bit-Ganzzahl ausgedrückt werden kann, ändern Sie den Parametertyp in System.Decimal. Beachten Sie, dass sowohl System.Single als auch System.Double in den oberen Bereichen des Int64-Datentyps an Genauigkeit verlieren. Wenn ein Member nicht für COM sichtbar sein soll, markieren Sie diesen mit dem auf false festgelegten ComVisibleAttribute.
Wann sollten Warnungen unterdrückt werden?
Eine Warnung dieser Regel kann gefahrlos unterdrückt werden, wenn sichergestellt ist, dass keine Visual Basic 6-COM-Clients auf den Typ zugreifen.
Beispiel
Im folgenden Beispiel wird ein Typ veranschaulicht, der gegen die Regel verstößt.
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) {}
}
}
Verwandte Regeln
Vermeiden von nicht öffentlichen Feldern in ComVisible-Werttypen
Statische Member in für COM sichtbaren Typen vermeiden
Markieren von Assemblys mit dem ComVisible-Attribut