Evitare gli argomenti Int64 per i client Visual Basic 6
Aggiornamento: novembre 2007
TypeName |
AvoidInt64ArgumentsForVB6Clients |
CheckId |
CA1406 |
Categoria |
Microsoft.Interoperability |
Breaking Change |
Breaking |
Causa
Un tipo specificatamente contrassegnato come visibile a 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 valori 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.
Correzione delle 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
Evitare i campi non pubblici nei tipi di valori visibili a COM
Evitare i membri statici nei tipi visibili a COM
Contrassegnare gli assembly con ComVisibleAttribute
Vedere anche
Riferimenti
Tipo di dati Long (Visual Basic)