Hallo C#-Gemeinde,
wenn ich eine COM-DLL mit c# erstelle und Sie z.B. in VBA einbinde (über Verweise) sehe ich die Methoden und Eigenschaften nicht? Weiss einer weiter?
Vielen Dank =)
Die Tragig der Welt liegt darin, dass die Dummen so voller Selbstsicherheit sind und die Weisen voller Selbstzweifel!
ich glaub mit C# kann man keine COM, sondern nur COM+ Objekte erstellen
VBA erlaubt wohl nur den Zugriff auf COM Automation Server, d.h. der Aufruf erfolgt dynamisch und nicht statisch gebunden. Dazu muss das COM-Objekt das IDispatch-Interface implementierem (und noch einiges mehr). Kurz gesagt: ComVisible(true) reicht nicht aus, weil das nur Einträge in der TypLib (für statische Bindung) erzeugt.
Hier die Schritte:
* Declare a public interface which describes the COMinterface of the class
* Declare the class as implementing this interface
* Declare a public interface which describes the events the class can sink (COM jargon for raising events)
* Decorate this interface with an InterfaceType attribute an IDispatch interface
* Decorate the class with a ComSourceInterface attribute
* Decorate the class with ClassInterface attribute
* Decorate the COMinterface, the eventsink interface and the class with Guid attributes
Hier ein Beispiel für einen solchen Automation Server:
http://www.codeproject.com/dotnet/nettocom.asp?df=100&forumid=14076&exp=0&select=1184644
Danke für die rasche Antwort!
Im Objektkatalog von VBA-Excel sehe ich zwar die Methoden, jedoch führt die Ausführung hier zu einem Automatisierungsfehler!? In VBA-Access funzt es!!?
Schöne Grüße und Danke nochmals!
antopa
Die Tragig der Welt liegt darin, dass die Dummen so voller Selbstsicherheit sind und die Weisen voller Selbstzweifel!
Wissensvermittler und Technologieberater
für .NET, Codequalität und agile Methoden
COM+ ist etwas ganz anderes als COM. Das sollte man nicht durcheinander bringen.
COM ist ein Modell zum entwickeln von Software in Komponenten. Diese Komponenten werden über Schnittstellen abgesprochen.
DCOM ist eine Erweiterung von COM. Das "D" steht für "distributed" (Deutsch: verteilt). Das bedeutet nicht, dass jemand COM in kleine Fetzen gerissen hat (weil er sich über die DLL-Hölle aufgeregt hat), sondern dass Komponenten auf verschiedenen Computern miteinander kommunizieren können (Normale COM Komponenten können nicht über Netzwerk aufgerufen werden, sondern nur lokal).
COM+ ist der Name des Microsoft Applikationsservers (bzw. der Name seiner Technologie, denn es wird nicht mehr von einem Server, sondern von Betriebssystemdiensten gesprochen). COM+ ist ein zentralisierter Lebensraum für Komponenten, deren Funktion von Clients konsumiert werden können. COM+ stellt dem Komponenten-Entwickler Infrastruktur-Dienste (z.B. automatische verteilte Transaktionen) zur Verfügung. Die erste Version dieser Technologie hieß Microsoft Transaction Server (MTS) und wurde mit dem Windows NT Option Pack eingeführt. Da der Name aber unglücklich gewählt war (es ist eben kein Transaktions-Server, sondern ein Applikationsserver) wurde die nächste Version (ab Windows 2000) COM+ genannt. COM+ weil ein Applikationsserver für COM-Komponenten.
Für COM/Interop registrierte C#-Assemblies sind sozusagen "normale" COM-Komponenten. Um COM+ Komponenten zu bauen, müssen die Klassen von System.EnterpriseServices.ServicedComponent abgeleitet sein. COM+ für .NET wird auch als "Enterprise Services" bezeichnet.