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.Single 和 System.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) {}
}
}
相关规则
CA1017:用 ComVisibleAttribute 标记程序集