CA1406: Visual Basic 6 クライアントに対しては Int64 引数を使用しません
TypeName |
AvoidInt64ArgumentsForVB6Clients |
CheckId |
CA1406 |
分類 |
Microsoft.Interoperability |
互換性に影響する変更点 |
あり |
原因
コンポーネント オブジェクト モデル (COM: Component Object Model) から参照可能として個別にマークされた型が、Int64 引数を受け取るメンバーを宣言しています。
規則の説明
Visual Basic 6 COM クライアントでは、64 ビット整数にアクセスできません。
既定で COM から参照できるものは、アセンブリ、パブリック型、パブリック型のパブリック インスタンス メンバー、パブリック値型のすべてのメンバーです。ただし、誤った規則違反のレポートを減らすために、この規則では、COM から参照できる型を明示的に示す必要があります。包含アセンブリは、ComVisibleAttribute を false に設定してマークし、型は、ComVisibleAttribute を true に設定してマークする必要があります。
違反の修正方法
値を常に 32 ビット整数で表せるパラメーターについて、この規則違反を修正するには、パラメーター型を Int32 に変更します。パラメーターの値が 32 ビット整数で表すことができる値を超える可能性がある場合は、パラメーター型を Decimal に変更します。Single と Double のどちらでも、Int64 データ型の上限で有効桁数が失われることに注意してください。メンバーが COM から参照できないようにするには、ComVisibleAttribute を false に設定してください。
警告を抑制する状況
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 を設定します