Перегрузки в COM-взаимодействии (CCW) - имена IDispatch включают суффикс (_2, _3 и т. Д.)

У меня есть управляемая сборка, содержащая несколько классов, и эти классы имеют перегруженные методы. Выставляю сборку на звонилки COM / IDispatch через

[ComVisible(true)]

... и также установка правильного Guid на самой сборке. Я не определяю явный интерфейс для взаимодействия COM. Все это делается динамически. я бегуregasm.exe /codebase на управляемой DLL, и это регистрирует это для COM-взаимодействия.

Когда я запускаю OleView, я вижу ProgId различных классов в сборке. Но, просматривая эти ProgIds и расширяя узел IDispatch, нет никакой информации TypeLib для этих классов.

Несмотря на это, из сценария я могу вызвать метод, который принимает нулевые аргументы, или метод, который принимает один аргумент. Если есть также перегрузка, которая принимает более одного аргумента, я не могу вызвать этот метод по имени. Ошибка, которую я получаю, постоянно

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

Из этого я понял, что клиенты COM / IDispatch не могли должным образом разрешать перегруженные методы для объекта, доступного через взаимодействие COM.

Потом я добавил

[ClassInterface(ClassInterfaceType.AutoDual)]

... каждому из рассматриваемых классов. Послеregasm.exe в DLL я вижу информацию о typelib для каждого метода в узле IDispatch.

Я обнаружил, что перегруженные методы автоматически получают имя с добавленным суффиксом. MethodX будет отображать перегрузки в автоматически сгенерированной сборке typelib как MethodX, MethodX_2, MethodX_3 и так далее.

И я обнаружил, что, ссылаясь на имена методов с этими суффиксами, я мог вызывать перегруженные методы, хотя и не с общим именем.

Более интересно, если я тогда удалил[ClassInterface(ClassInterfaceType.AutoDual)] из классов, я могstill вызывать перегруженные методы таким образом, избегаяWrong number of arguments or invalid property assignment ошибка.

Мой вопрос: стабильно ли это поведение - добавление числовых суффиксов к именам членов? документально? надежный?

Ответы на вопрос(3)

Ваш ответ на вопрос