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


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

Товар Значение
Идентификатор правила CA1406
Категория Microsoft.Interoperability
Критическое изменение Критическое

Причина

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

Примечание.

Это правило устарело. Дополнительные сведения см. в разделе "Устаревшие правила".

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

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

По умолчанию следующие элементы видны COM: сборки, общедоступные типы, члены общедоступного экземпляра в общедоступных типах и все члены типов общедоступных значений. Однако для уменьшения ложных срабатываний это правило требует явного указания com-видимости типа; Содержащая сборка должна быть помечена набором System.Runtime.InteropServices.ComVisibleAttributefalse , а тип должен быть помечен набором ComVisibleAttributetrue.

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

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

Когда лучше отключить предупреждения

Если вы уверены, что клиенты COM Visual Basic 6 не смогут получить доступ к типу, можно отключить предупреждение из этого правила.

Пример

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

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

См. также