2014-06-12 5 views
5

Wenn ich eine Klasse in einer C# /. NET-Klassenbibliothek definiere, dann kann ich die Klasse instanziieren, indem ich sie COM sichtbar mache und ihre Methoden von VBA aus aufrufen, indem ich COM verwende.Kann ich eine statische Methode einer C# -Klasse von VBA über COM aufrufen?

Gibt es eine Möglichkeit, die statischen Methoden einer solchen Klasse von VBA aufrufen?

+2

http://msdn.microsoft.com/en-us/library/ms182198.aspx ist es Ihre Frage? –

+1

Sie müssten eine Instanzmethode erstellen, die die statische Methode für COM umschließt. – vcsjones

+0

@JackMalkovich: Der Link sagt "COM unterstützt keine statischen Methoden", also ja, das beantwortet meine Frage ("Nein"). Fühlen Sie sich frei, das als Antwort zu stellen. –

Antwort

7

COM unterstützt keine statischen Methoden und Instanzen von COM-Objekten rufen keine statischen Methoden auf. Stattdessen ComVisible(false) auf statische Methode gesetzt, dann eine Instanz Verfahren machen es zu wickeln:

[ComVisible(true)] 
public class Foo 
{ 
    [ComVisible(false)] 
    public static void Bar() {} 

    public void BarInst() 
    { 
     Bar(); 
    } 
} 

Oder einfach nur die Methode Instanz machen, anstatt statisch und vergessen alle zusammen statisch.

Sie haben haben zu markieren die statische Methode als nicht sichtbar für COM, jedoch erfüllt es einige Code-Analyse-Tools, die Sie über statische Methoden auf COM sichtbaren Typen warnen würde, und macht deutlich, dass die statische Methode ist nicht für COM sichtbar sein.