Share via


CA1406: Int64-Argumente für Visual Basic 6-Clients vermeiden.

Element Wert
RuleId CA1406
Category Microsoft.Interoperability
Unterbrechende Änderung Breaking

Ursache

Ein Typ, der speziell als sichtbar für das Component Object Model (COM) gekennzeichnet ist, deklariert einen Member, der ein System.Int64-Argument akzeptiert.

Hinweis

Diese Regel wurde als veraltet markiert. Weitere Informationen finden Sie unter Veraltete Regeln.

Regelbeschreibung

Visual Basic 6-COM-Clients können nicht auf 64-Bit-Ganzzahlen zugreifen.

Standardmäßig sind für COM folgende Elemente sichtbar: Assemblys, öffentliche Typen, Member öffentlicher Instanzen in öffentlichen Typen und alle Member von öffentlichen Werttypen. Um falsch positive Ergebnisse zu reduzieren, erfordert diese Regel jedoch, dass die COM-Sichtbarkeit des Typs explizit angegeben wird. Die enthaltende Assembly muss mit auf false festgelegtem System.Runtime.InteropServices.ComVisibleAttribute gekennzeichnet sein, und der Typ muss mit auf true festgelegtem ComVisibleAttribute gekennzeichnet sein.

Behandeln von Verstößen

Um einen Verstoß gegen diese Regel für einen Parameter zu beheben, dessen Wert immer als 32-Bit-Ganzzahl ausgedrückt werden kann, ändern Sie den Parametertyp in System.Int32. Wenn der Wert des Parameters größer sein kann, als er durch eine 32-Bit-Ganzzahl ausgedrückt werden kann, ändern Sie den Parametertyp in System.Decimal. Beachten Sie, dass sowohl bei System.Single als auch bei System.Double die Genauigkeit in den oberen Bereichen des Datentyps Int64 verloren geht. Wenn der Member nicht für COM sichtbar sein soll, markieren Sie ihn mit dem auf false festgelegten ComVisibleAttribute.

Wann sollten Warnungen unterdrückt werden?

Sie können eine Warnung aus dieser Regel gefahrlos unterdrücken, wenn sicher ist, dass Visual Basic 6-COM-Clients nicht auf den Typ zugreifen.

Beispiel

Das folgende Beispiel zeigt einen Typ, der gegen die Regel verstößt.

using System;
using System.Runtime.InteropServices;

[assembly: ComVisible(false)]
namespace InteroperabilityLibrary
{
   [ComVisible(true)]
   public class SomeClass
   {
      public void LongArgument(long argument) {} 
   }
}

CA1413: Nicht öffentliche Felder in für COM sichtbaren Werttypen vermeiden.

CA1407: Statische Member in für COM sichtbaren Typen vermeiden.

CA1017: Assemblys mit ComVisibleAttribute markieren.

Siehe auch