次の方法で共有


CA1406: Visual Basic 6 クライアントに対しては Int64 引数を使用しません

TypeName

AvoidInt64ArgumentsForVB6Clients

CheckId

CA1406

[カテゴリ]

Microsoft.Interoperability

互換性に影響する変更点

あり

原因

コンポーネント オブジェクト モデル (COM: Component Object Model) から参照可能として個別にマークされた型が、System.Int64 引数を受け取るメンバーを宣言しています。

規則の説明

Visual Basic 6 COM クライアントでは、64 ビット整数にアクセスできません。

既定で COM から参照できるものは、アセンブリ、パブリック型、パブリック型のパブリック インスタンス メンバー、パブリック値型のすべてのメンバーです。ただし、誤った規則違反のレポートを減らすために、この規則では、COM から参照できる型を明示的に示す必要があります。包含アセンブリは、System.Runtime.InteropServices.ComVisibleAttribute を false に設定してマークし、型は、ComVisibleAttribute を true に設定してマークする必要があります。

違反の修正方法

値を常に 32 ビット整数で表せるパラメーターについて、この規則違反を修正するには、パラメーター型を System.Int32 に変更します。パラメーターの値が 32 ビット整数で表すことができる値を超える可能性がある場合は、パラメーター型を System.Decimal に変更します。System.SingleSystem.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 を設定します

参照

関連項目

Long 型 (Visual Basic)

その他の技術情報

アンマネージ コードとの相互運用