PRB: Overloaded Methods in a .NET Component May Not Be Version-Compatible for Unmanaged Clients (317626)



The information in this article applies to:

  • Microsoft .NET Framework 1.1
  • Microsoft .NET Framework 1.0

This article was previously published under Q317626

SYMPTOMS

If a managed component has an interface that contains overloaded methods, and you update the component with more overloaded methods, the methods may no longer be version-compatible for an unmanaged client. This may break existing COM (that is, unmanaged) clients.

CAUSE

Components with overloaded methods are exposed to unmanaged clients as <methodName>_n, where n varies from two to the total number of overloads for that specific method. If you add a new overloaded method, the numbering scheme may generate a different name for the same method.

STATUS

This behavior is by design.

MORE INFORMATION

If the managed component has an interface with the following overloaded members
void TestMethod(short a);
void TestMethod(long a);
void TestMethod(string a);
				
these methods are exposed to the unmanaged client (that is, the COM client) respectively as the following:
HRESULT TestMethod(short a);
HRESULT TestMethod_2(__int64 a);
HRESULT TestMethod_3(BSTR a);
				
If you add another overloaded method to update this component, and if the method is added between the existing methods in order, as follows
void TestMethod(short a);
void TestMethod(int a);
void TestMethod(long a);
void TestMethod(string a);
				
the class is exposed to the unmanaged client respectively as the following:
HRESULT TestMethod(short a);
HRESULT TestMethod_2(long a);
HRESULT TestMethod_3(__int64 a);
HRESULT TestMethod_4(BSTR a);
				
This change is version-compatible in a managed client. However, for an unmanaged client, these methods are unintuitive and are not version compatible.

In the example, initially
void TestMethod(long a);
				
is exposed to the unmanaged client as the following:
HRESULT TestMethod_2(__int64 a);
				
When you add a new overloaded method to update this component, the same method in the component is exposed to the unmanaged client as the following:
HRESULT TestMethod_3(__int64 a);
				

Modification Type:MajorLast Reviewed:4/8/2003
Keywords:kbCOMInterop kbprb KB317626