다음을 통해 공유


CA1406: Visual Basic 6 클라이언트에서 Int64 인수를 사용하지 않습니다.

TypeName

AvoidInt64ArgumentsForVB6Clients

CheckId

CA1406

범주

Microsoft.Interoperability

변경 수준

주요 변경

원인

COM(Component Object Model)에서 볼 수 있는 것으로 표시된 형식이 System.Int64 인수를 사용하는 멤버를 선언합니다.

규칙 설명

Visual Basic 6 COM 클라이언트는 64비트 정수에 액세스할 수 없습니다.

기본적으로 어셈블리, public 형식, public 형식의 public 인스턴스 멤버, public 값 형식의 모든 멤버는 COM에서 볼 수 있습니다. 하지만 가양성(false positives)을 줄이기 위해 이 규칙에서는 형식의 COM 노출 여부를 명시적으로 지정하도록 요구합니다. 포함 어셈블리는 false로 설정된 System.Runtime.InteropServices.ComVisibleAttribute로 표시되어야 하며 형식은 true로 설정된 ComVisibleAttribute로 표시되어야 합니다.

위반 문제를 해결하는 방법

값을 항상 32비트 정수 계열로 표현할 수 있는 매개 변수의 경우 이 규칙 위반 문제를 해결하려면 매개 변수 형식을 System.Int32로 변경합니다. 매개 변수의 값이 32비트 정수 계열로 표현할 수 있는 것보다 큰 경우에는 매개 변수 형식을 System.Decimal로 변경합니다. System.SingleSystem.Double 모두 Int64 데이터 형식의 상위 범위에서 정밀도가 떨어집니다. 멤버를 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: ComVisible 값 형식에 public이 아닌 필드를 사용하지 마십시오.

CA1407: COM 노출 형식에 정적 멤버를 사용하지 마십시오.

CA1017: ComVisibleAttribute로 어셈블리 표시

참고 항목

참조

Long 데이터 형식(Visual Basic)

기타 리소스

비관리 코드와의 상호 운용