Поделиться через


CA1406: не следует использовать аргументы Int64 для клиентов Visual Basic 6

TypeName

AvoidInt64ArgumentsForVB6Clients

CheckId

CA1406

Категория

Microsoft.Interoperability

Критическое изменение

Критическое изменение

Причина

Тип, который специально помечен как видимый для COM, объявляет член, который принимает аргумент типа Int64.

Описание правила

COM-клиенты VisualBasic 6 не могут получать доступ к 64-разрядным целым числам.

По умолчанию для модели COM видимы следующие объекты: сборки, общие типы, члены общих экземпляров в общих типах и все элементы общих типов значений.Однако чтобы снизить количество ложных положительных результатов, данное правило требует явно указывать видимость типа для COM; содержащая тип сборка должна быть помечена атрибутом ComVisibleAttribute, для которого установлено значение false, а тип необходимо пометить атрибутом ComVisibleAttribute со значением true.

Устранение нарушений

Чтобы устранить нарушение данного правила для параметра, значение которого всегда можно представить 32-разрядным целым числом, измените тип параметра на Int32.Если значение параметра слишком велико для представления в виде 32-разрядного целого числа, измените тип параметра на Decimal.Обратите внимание, что при преобразовании в тип Single или Double происходит потеря точности в области верхней границы диапазона допустимых значений типа Int64.Если член не предназначен для взаимодействия с COM, пометьте его атрибутом ComVisibleAttribute со значением false.

Отключение предупреждений

Отключение предупреждений данного правила безопасно в том случае, если COM-клиенты Visual Basic 6 не получают доступ к типу.

Пример

В следующем примере показан тип, который нарушает данное правило.

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)

Другие ресурсы

Взаимодействие с неуправляемым кодом