CA1406:避免对 Visual Basic 6 客户端使用 Int64 参数

类型名

AvoidInt64ArgumentsForVB6Clients

CheckId

CA1406

类别

Microsoft.Interoperability

是否重大更改

原因

明确标记为对组件对象模型 (COM) 可见的类型声明了一个采用 System.Int64 参数的成员。

规则说明

Visual Basic 6 COM 客户端不能访问 64 位整数。

默认情况下,以下项对 COM 可见:程序集、公共类型、公共类型中的公共实例成员和公共值类型的所有成员。 但是,为了减少误报,此规则要求显式声明类型的 COM 可见性;包含程序集必须用设置为 false 的 System.Runtime.InteropServices.ComVisibleAttribute 进行标记,类型必须用设置为 true 的 ComVisibleAttribute 进行标记。

如何解决冲突

要修复值始终可以表示为 32 位整数的参数与该规则的冲突,请将该参数的类型更改为 System.Int32。 如果 32 位整数不足以表示该参数的值,则应将该参数的类型更改为 System.Decimal。 请注意,在 Int64 数据类型的上限范围,System.SingleSystem.Double 的精度都降低。 如果成员不打算对 COM 可见,请用设置为 false 的 ComVisibleAttribute 对它进行标记。

何时禁止显示警告

如果确定 Visual Basic 6 COM 不会访问该类型,则可以安全地禁止显示此规则发出的警告。

示例

下面的示例演示一个与该规则冲突的类型。

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

相关规则

CA1413:避免在 COM 可见值类型中使用非公共字段

CA1407:避免在 COM 可见类型中使用静态成员

CA1017:用 ComVisibleAttribute 标记程序集

请参见

参考

Long 数据类型 (Visual Basic)

其他资源

与非托管代码交互操作