Udostępnij za pośrednictwem


CA1406: Uniknąć Int64 argumenty dla klientów programu Visual Basic 6

TypeName

AvoidInt64ArgumentsForVB6Clients

CheckId

CA1406

Kategoria

Microsoft.Interoperability

Zmiana kluczowa

Kluczowa

Przyczyna

Typ, który jest wyraźnie oznaczony jako widoczny dla Component Object Model (COM) deklaruje element członkowski, który przyjmuje argument System.Int64.

Opis reguły

Klienci Visual Basic 6 COM nie mogą uzyskać dostępu do 64-bitowych liczb całkowitych.

Domyślnie następujące elementy są widoczne dla COM: zestawy, typy publiczne, publiczne wystąpienia elementów człokowskich w typach publicznych oraz wszystkie elementy członkowskie o publicznych typach wartościowych.Jednak w celu zmniejszenia fałszywych wyników, ta reguła wymaga wyraźnie podanej widoczności typu COM; zawierające zestawy muszą być oznaczone System.Runtime.InteropServices.ComVisibleAttribute ustawionym na false i typ musi być oznaczony ComVisibleAttribute ustawionym na true.

Jak naprawić naruszenia

Aby naprawić naruszenie tej zasady dla parametru, którego wartość zawsze może być wyrażona jako 32-bitowa wartość integralna, należy zmienić typ parametru na System.Int32.Jeśli wartość parametru może być większa i nie może być wyrażona jako 32-bitowa wartość integralna, należy zmienić typ parametru na System.Decimal.Należy zauważyć, że zarówno System.Single i System.Double tracą precyzję w górnym zakresie typu danych Int64.Jeżeli element członkowski nie ma być widoczny dla modelu COM, należy oznaczyć go ComVisibleAttribute ustawionym na false.

Kiedy pominąć ostrzeżenia

Bezpiecznie jest pominąć ostrzeżenie od tej reguły, jeśli jest pewne, że klienci Visual Basic 6 COM nie będą mieć dostępu do typu.

Przykład

Poniższy przykład pokazuje typ, który narusza regułę.

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) {} 
   }
}

Powiązane reguły

CA1413: Uniknąć publiczno-pola typów wartości widoczne COM

CA1407: Uniknąć elementy statyczne w typach widoczne COM

CA1017: Znak zespołów o ComVisibleAttribute

Zobacz też

Informacje

Typ danych LONG (Visual Basic)

Inne zasoby

Współdziałanie z kodu niezarządzanego