Condividi tramite


CA1406: Evitare gli argomenti Int64 per i client Visual Basic 6

TypeName

AvoidInt64ArgumentsForVB6Clients

CheckId

CA1406

Category

Microsoft.Interoperability

Breaking Change

Breaking

Causa

Un tipo specificatamente contrassegnato come visibile a Component Object Model (COM) dichiara un membro che accetta un argomento System.Int64.

Descrizione della regola

I client COM Visual Basic 6 non sono in grado di accedere a Integer a 64 bit.

Per impostazione predefinita, i seguenti elementi sono visibili a COM: assembly, tipi pubblici, membri di istanza pubblici in tipi pubblici e tutti i membri di tipi di valore pubblici.Per ridurre i falsi positivi, tuttavia, la regola richiede che la visibilità COM del tipo sia dichiarata esplicitamente. L'assembly che lo contiene deve essere contrassegnato dall'impostazione dell'oggetto System.Runtime.InteropServices.ComVisibleAttribute su false mentre il tipo deve essere contrassegnato dall'impostazione dell'oggetto ComVisibleAttribute su true.

Come correggere le violazioni

Per correggere una violazione di questa regola per un parametro il cui valore può sempre essere espresso come integrale a 32 bit, modificare il tipo di parametro in System.Int32.Se il valore del parametro può essere maggiore di quanto è possibile esprimere con un integrale a 32 bit, modificare il tipo di parametro in System.Decimal.Si noti che sia per System.Single che per System.Double si determina una riduzione della precisione in corrispondenza degli intervalli superiori del tipo di dati Int64.Se non si intende rendere il membro visibile a COM, contrassegnarlo impostando ComVisibleAttribute su false.

Esclusione di avvisi

È possibile escludere senza rischi un avviso da questa regola se si è certi che i client COM Visual Basic 6 non accederanno al tipo.

Esempio

Nell'esempio riportato di seguito viene illustrato un tipo che viola la regola.

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

Regole correlate

CA1413: Evitare i campi non pubblici nei tipi valore visibili a COM

CA1407: Evitare i membri statici nei tipi visibili a COM

CA1017: Contrassegnare gli assembly con ComVisibleAttribute

Vedere anche

Riferimenti

Tipo di dati Long (Visual Basic)

Altre risorse

Interoperabilità con codice non gestito