Was this page helpful?
Your feedback about this content is important. Let us know what you think.
Additional feedback?
1500 characters remaining
Export (0) Print
Expand All
Important This document may not represent best practices for current development, links to downloads and other resources may no longer be valid. Current recommended version can be found here.

Avoid Int64 arguments for Visual Basic 6 clients







Breaking Change


A type that is specifically marked as visible to COM declares a member that takes a System.Int64 argument.

Visual Basic 6 COM clients cannot access 64-bit integers.

By default, the following are visible to COM: assemblies, public types, public instance members in public types, and all members of public value types. However, to reduce false positives, this rule requires the COM visibility of the type to be explicitly stated; the containing assembly must be marked with the System.Runtime.InteropServices.ComVisibleAttribute set to false and the type must be marked with the ComVisibleAttribute set to true.

To fix a violation of this rule for a parameter whose value can always be expressed as a 32-bit integral, change the parameter type to System.Int32. If the value of the parameter might be larger than can be expressed as a 32-bit integral, change the parameter type to System.Decimal. Note that both System.Single and System.Double lose precision at the upper ranges of the Int64 data type. If the member is not meant to be visible to COM, mark it with the ComVisibleAttribute set to false.

It is safe to suppress a warning from this rule if it is certain that Visual Basic 6 COM clients will not access the type.

The following example shows a type that violates the rule.

using System;
using System.Runtime.InteropServices;

[assembly: ComVisible(false)]
namespace InteroperabilityLibrary
   public class SomeClass
      public void LongArgument(long argument) {} 

Community Additions

© 2015 Microsoft