Benutzer mit den meisten Antworten
C# Klasse als COM Klasse zur Verfügung stellen

Frage
Antworten
-
Hallo Frank,
vielen Dank für die umfangreichen Informationen.
Nach einiger Recherche habe ich einen ganz einfachen Weg gefunden, wie aus VBScript mit dem Office COM AddIn kommuniziert werden kann. Jedoch geht dies nur in Verbindugn mit dem zur Entwicklung von Office AddOns verwendetete AddInExpress Framework.
Im C# COMAddIn muss lediglich in der AddIn Klasse eine Methode public deklariert sein. Da es sich bei der AddInExpress Klasse um ein COM Objekt handelt, ist diese automatisch in VBScript verfügbar. Das AdddInExpress Framework verwendet intern die Eigenschaft COMAddIn.Object. Aus VBScript kann dann die öffentliche C# Methode aufgerufen werden:
Call Application.COMAddins.Item("ProgIG.AddinModule").Object.MeineCSharpMethode("EinParameter")
Viele Grüße
Christian
- Als Antwort markiert Christian315 Freitag, 16. September 2011 06:19
Alle Antworten
-
Hallo Christian,
schau mal hier, das sollte wohl so gut wie alle Fragen dazu klären.
http://jumbloid.blogspot.com/2009/12/making-net-dll-com-visible.html
Gruß, Stefan
Microsoft MVP - Visual Developer ASP/ASP.NET
http://www.asp-solutions.de/ - Consulting, Development
http://www.aspnetzone.de/ - ASP.NET Zone, die ASP.NET Community -
Hallo Christian,
unter http://msdn.microsoft.com/de-de/library/zsfww439.aspx findest Du eine Anleitung / Erklärung dazu.
Es findet sich auch ein Beispiel dabei, dass dies nochmal verdeutlicht.
Hast Du konkrete Fragen / Probleme? Das ist evtl. einfacher, als hier die MSDN zu wiederholen.
Mit den besten Grüßen,
Konrad
-
Hallo Konrad,
vielen Dank für die Hilfe!
Mein Problem ist folgendes: Ich möchte aus einem Outlook Formular einen Information an mein C# COM AddIn übergeben, welches von Outlook geladen ist. Beim OL Objektmodell kann ich dem AddIn eine Referenz auf eine COM Klasse zuordnen, auf welche ich aus dem VBScript des OL Formulars zugreifen kann (late binding über IDispatch).
Diesen Weg habe ich mit einem VB6 COM AddIn erfolgreich geprüft. Da es sich bei der finalen Lösung jedoch um ein C# AddIn handelt, muss ich ein das Objekt, welches ich aus dem VBScript aufrufen möchte diesem als COM Objekt zur Verfügung stellen.
Viele Grüße
Christian
-
Hallo Christian,
der Link von Stefan bietet schon einen Einstigspunkt.
Dennoch geht das heutzutage schon normal etwas einfacher mit VS 2010.
Und tatsächlich reicht es oft nicht, nur über diese ClassInterfaceType's zu gehen, sondern (auch wenn das in einigen Szenariennicht empfehlenswertist) wenn man wirklich volle VBScript-Funktionalität haben will, benötigt man oft das [ClassInterfaceType.AutoDual] Attribut, etwa, um volle Intellisense möglich zu machen. Die duale Schnittstelle (ClassInterface.AutoDual) stellt im Gegensatz zu einer auf Dispatch basierenden Schnittstelle eine Beschreibung der Klassenschnittstelle in der exportierten Typbibliothek bereit.Durch diese Beschreibung werden spät gebundene Clients veranlasst, DispIds zur Laufzeit zwischenzuspeichern.Ansonsten siehe auch:
[.NET_Objekt_an_ein_VBScript_übergeben in C#]
http://www.eggheadcafe.com/microsoft/Csharp/36066417/netobjektaneinvbscriptbergeben.aspxAber auch:
[COM Componente/ COM Objekt unter C# erstellen ? - Meinews.de]
http://meinews.niuz.biz/com-t508883.htmlMit einem Beispiel-Projekt:
http://Dzaebel.NET/Downloads/MyComLib08.zip
(da gehört übrigens eigentlich noch ein Anwendungsmanifest-Datei hinein, die ein RequireAdministrator fordert, damit man gezwungen ist, die IDE mit administrativen Rechten zu öffnen. Muß ich bei Gelegenheit mal nachholen [Edit: done])
ciao Frank- Bearbeitet Frank Dzaebel Samstag, 10. September 2011 08:44 Manifeste eingefügt
-
Hallo Frank,
vielen Dank für die umfangreichen Informationen.
Nach einiger Recherche habe ich einen ganz einfachen Weg gefunden, wie aus VBScript mit dem Office COM AddIn kommuniziert werden kann. Jedoch geht dies nur in Verbindugn mit dem zur Entwicklung von Office AddOns verwendetete AddInExpress Framework.
Im C# COMAddIn muss lediglich in der AddIn Klasse eine Methode public deklariert sein. Da es sich bei der AddInExpress Klasse um ein COM Objekt handelt, ist diese automatisch in VBScript verfügbar. Das AdddInExpress Framework verwendet intern die Eigenschaft COMAddIn.Object. Aus VBScript kann dann die öffentliche C# Methode aufgerufen werden:
Call Application.COMAddins.Item("ProgIG.AddinModule").Object.MeineCSharpMethode("EinParameter")
Viele Grüße
Christian
- Als Antwort markiert Christian315 Freitag, 16. September 2011 06:19
-
Hallo Christian,
- wie aus VBScript mit dem Office COM AddIn kommuniziert werden kann ...
dann hast Du am Anfang etwas ziemlich anderes gefragt, als Du eigentlich wissen wolltest ;-)
Das, was Du geschrieben hast ... damit meinst Du eher VBA (als VBS). Also etwa dieses:
[Aufrufen von Code in Add-Ins auf Anwendungsebene von anderen Office-Projektmappen]
http://msdn.microsoft.com/de-de/library/bb608621.aspx
ciao Frank