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)