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.Single과 System.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로 어셈블리 표시