Überladungen in COM-Interop (CCW) - IDispatch-Namen enthalten das Suffix (_2, _3 usw.)

Ich habe eine verwaltete Assembly, die einige Klassen enthält, und diese Klassen haben überladene Methoden. Ich setze die Assembly COM / IDispatch-Aufrufern über aus

[ComVisible(true)]

..und auch das richtige Guid auf der Baugruppe selbst einstellen. Ich definiere keine explizite Schnittstelle für das COM-Interop. Es wird alles dynamisch erledigt. ich renneregasm.exe /codebase auf der verwalteten DLL und registriert es für COM-Interop.

Wenn ich OleView ausführe, kann ich die ProgId der verschiedenen Klassen in der Assembly sehen. Beim Durchsuchen dieser ProgIds und Erweitern des IDispatch-Knotens sind jedoch keine TypeLib-Informationen für diese Klassen vorhanden.

Trotzdem kann ich von einem Skript aus eine Methode aufrufen, die keine Argumente akzeptiert, oder eine Methode, die ein Argument akzeptiert. Wenn es auch eine Überladung gibt, die mehr als ein Argument akzeptiert, kann ich diese Methode nicht namentlich aufrufen. Der Fehler, den ich konsequent bekomme, ist

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

Daraus ging hervor, dass COM / IDispatch-Clients überladene Methoden für ein über COM-Interop verfügbar gemachtes Objekt nicht ordnungsgemäß auflösen konnten.

Dann habe ich hinzugefügt

[ClassInterface(ClassInterfaceType.AutoDual)]

... zu jeder der fraglichen Klassen. Nach demregasm.exe In der DLL werden Typelib-Informationen für jede Methode unter dem IDispatch-Knoten angezeigt.

Ich habe festgestellt, dass überladene Methoden automatisch einen Namen erhalten, der ein angefügtes Suffix enthält. MethodX legt Überladungen in der automatisch generierten Typelib-Assembly wie MethodX, MethodX_2, MethodX_3 usw. offen.

Und ich stellte fest, dass ich durch Verweisen auf die Methodennamen mit diesen Suffixen überladene Methoden aufrufen konnte, wenn auch nicht mit dem allgemeinen Namen.

Interessanter, wenn ich dann das entferne[ClassInterface(ClassInterfaceType.AutoDual)] Aus dem Unterricht konnte ichimmer noch Rufen Sie die überladenen Methoden auf diese Weise auf und vermeiden Sie so dieWrong number of arguments or invalid property assignment Error.

Meine Frage ist: Ist dieses Verhalten - Anhängen von numerischen Suffixen an die Mitgliedsnamen - stabil? dokumentiert? zuverlässig?

Antworten auf die Frage(3)

Ihre Antwort auf die Frage