Laden...

Schnittstelle nur für COM sichtbar machen...geht das?

Erstellt von brainwave vor 10 Jahren Letzter Beitrag vor 10 Jahren 768 Views
brainwave Themenstarter:in
436 Beiträge seit 2007
vor 10 Jahren
Schnittstelle nur für COM sichtbar machen...geht das?

Hallo zusammen,

ich bin gerade dabei eine API für managed und unmanaged Code in C# zu entwickeln.
Nun gibt es in .NET die Möglichkeit mittels ComVisible eine Schnittstelle für COM sichtbar zu machen.

Meine Frage mag jetzt etwas sinnlos klingeln aber wäre es möglich eine für Com sichtbare Member
für managed Code (also aus .NET) unsichtbar zu machen?

Zum Hintergrund:

Da ich meine API auch aus VBScript aufrufe, benötige ich für die Methode GetFoos() zwei Implementierungen. Der erste Member ist aus Com nicht sichtbar. Nun möchte ich den zweiten
für managed unsichtbar machen damit eben nur der erste aufgerufen werden kann.


Foo[] GetFoos(string[] bar);

[ComVisible(true)]
object[] GetFoos(ref object bar);

1.346 Beiträge seit 2008
vor 10 Jahren

Wenn du nicht zwei mal kompilieren möchtest wäre das enifachste einfach die member aus Visual Studio zu verbergen. Natürlich sind sie trotzdem noch da, werden aber im IntelliSense nicht mehr gelistet:


[System.ComponentModel.EditorBrowsable(System.ComponentModel.EditorBrowsableState.Never)]
[ComVisible(true)]
object[] GetFoos(ref object bar); 

LG pdelvo

brainwave Themenstarter:in
436 Beiträge seit 2007
vor 10 Jahren

Danke für den Tip! Aber schade, dass es nicht anders geht...

Gibt es sowas auch für ganze Namespaces?

S
269 Beiträge seit 2010
vor 10 Jahren

Neben der Variante, diese Methoden für Intellisense zu verbergen, würde ich die einzelnen Methoden auch noch mit dem Obsolete-Attribut versehen, am ehesten sogar mit Fehlermeldung (also [Obsolete("COM only!", true)])
Ich weiß jetzt nicht, inwieweit sich das mit COM beißt... aber da die Attribute afaik nur für .NET gültig sind, spricht da nix gegen...
hat halt den Charme, dass, sollte der Programmierer trotz nicht vorhandenem Intellisense es schaffen, auf die Methode zuzugreifen, der Compiler eine Fehlermeldung ausspucken würde und er das Projekt nicht kompilieren könnte.

P.S.: Reflection lässt sich von Attributen übrigens nicht aufhalten 😉

ob es sowas für ganze Namespaces gibt, kann ich nicht sagen... spontan würde ich aber eher zu nein tendieren.

so far
Karill Endusa