Udostępnij za pośrednictwem


CA1406: Unikaj argumentów Int64 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 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 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 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 Decimal.Należy zauważyć, że zarówno Single i 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: Unikaj pól niepublicznych w typach wartościowych widocznych dla modelu COM

CA1407: Unikaj statycznych elementów członkowskich w typach widocznych dla modelu COM

CA1017: Oznacz zestawy za pomocą ComVisibleAttribute

Zobacz też

Informacje

Long — Typ danych (Visual Basic)

Inne zasoby

Współdziałanie z kodem niezarządzanym