Sobrecargas em interoperabilidade de COM (CCW) - nomes de IDispatch incluem sufixo (_2, _3, etc)

Eu tenho um assembly gerenciado contendo algumas classes, e essas classes têm métodos sobrecarregados. Eu exponho o assembly para chamadores COM / IDispatch via

[ComVisible(true)]

..e também definindo o próprio Guid, na própria montagem. Eu não defino uma interface explícita para a interoperabilidade COM. Tudo é feito dinamicamente. eu corroregasm.exe /codebase na DLL gerenciada e registra-lo para interoperabilidade COM.

Quando executo o OleView, posso ver os ProgIDs das várias classes na montagem. Mas, navegando para esses ProgIds e expandindo o nó IDispatch, não há informações TypeLib para essas classes.

Mesmo assim, a partir de um script, posso invocar um método que aceite zero argumentos ou um método que aceite um argumento. Se também houver uma sobrecarga que aceite mais de um argumento, não será possível invocar esse método pelo nome. O erro que recebo, consistentemente, é

Microsoft VBScript runtime error: Wrong number of arguments or invalid property assignment:  <methodname>

A partir disso, entendi que os clientes COM / IDispatch não foram capazes de resolver corretamente os métodos sobrecarregados em um objeto exposto via interoperabilidade COM.

Então eu adicionei

[ClassInterface(ClassInterfaceType.AutoDual)]

... para cada uma das classes em questão. Depois deregasm.exe na DLL, eu posso ver informações typelib para cada método, sob o nó IDispatch.

O que eu descobri é que os métodos sobrecarregados obtêm automaticamente um nome que inclui um sufixo acrescentado. O MethodX exporá sobrecargas no assembly typelib gerado automaticamente como MethodX, MethodX_2, MethodX_3 e assim por diante.

E eu descobri que referenciando os nomes dos métodos com esses sufixos, eu poderia invocar métodos sobrecarregados, embora não com o nome comum.

Mais interessante, se eu removesse o[ClassInterface(ClassInterfaceType.AutoDual)] das aulas, eu pudeainda invocar os métodos sobrecarregados desta forma, evitando assimWrong number of arguments or invalid property assignment erro.

Minha pergunta é: este comportamento - acrescentando sufixos numéricos aos nomes dos membros - está estável? documentado? confiável?

questionAnswers(3)

yourAnswerToTheQuestion