2009-05-18 2 views
8

Ich weiß, wie Sie eine COM-DLL (eine Klassenbibliothek) in C# erstellen. Ist es möglich, eine COM-Ersatz-EXE mit C# zu erstellen?Erstellen Sie COM-Ersatz-Server (Exe) in C#

Dies wäre ein eigenständiger Server, der COM-Objekte starten und hosten kann, auf die dann COM-Clients zugreifen können.

Antwort

2

Eine Option, wenn Sie eine prozessexterne COM-Komponente wünschen, ist das Hosten einer DLL in COM + über serviced components. Dies unterstützt jedoch nur DLL, aber Sie könnten eine Shell-Exe (für den eigenständigen Gebrauch) schreiben, die einfach auf die DLL verweist.

Nicht ganz so einfach wie VB, aber es funktioniert.

Ich erinnere mich jemand mir einen direkteren Weg zeigt (kein COM +), aber ich kann nicht für das Leben von mir erinnern, was es war ...

5

Der Standardersatzprozess für COM - die Sache, die Hosts COM DLLs, alias die COM Surrogate - ist dllhost.exe. Es ist möglich, einen Ersatzprozess in C++ zu erstellen. This article erklärt wie.

Diese APIs sind jedoch in Wrappern nicht als Teil der Basisklassenbibliothek in .NET Framework verfügbar. Wenn Sie schreiben möchten, um nur verwalteten Code zu schreiben, benötigen Sie etwas anderes.

Ich sehe ein paar Optionen.

  1. The Visual Studio SDK, ein kostenloser Download für Entwickler gedacht, die Visual Studio erweitern möchten. Innerhalb dieses SDK gibt es eine Klassenbibliothek, die solche Wrapper hat. Schauen Sie sich insbesondere the ISurrogate class an.
    ABER, sagt die VS SDK-Lizenz, dass das SDK in Ordnung ist, nur für Produkte zu verwenden, die Visual Studio erweitern oder hinzufügen. Ich bin kein Anwalt, aber das ist mein Verständnis der Lizenz, die ziemlich klar ist. Diese Begriffe bedeuten, dass das VS SDK nicht für das allgemeine App-Building geeignet wäre.
    Die einzige verbleibende Frage ist, genau wie verwenden Sie das VS SDK technisch zu einem COM-Surrogat mit nur C# -Code zu produzieren? Noch einmal, hier weiß ich nicht. Ich habe in den Dokumenten kurz nach Anleitungen zur Verwendung des ISurrogate-Wrappers gesucht, aber keine gefunden.
  2. Verwenden Sie den Code in this article.
    Der Artikel untersucht eine Reihe von verschiedenen Aspekten rund um COM und .NET Interop. Gegen Ende des Artikels bietet es Quellcode zum Erstellen Ihres eigenen COM-Servers in C# mit allen p/invoke-Aufrufen an CoRegisterClassObject() und Freunde.
4

Ich wollte dasselbe machen und fand hervorragendes Projektbeispiel CSExeCOMServer auf All-In-One Code Framework. Es rekonstruiert tatsächlich normale COM-Server-Logik mithilfe von .NET und systemeigenen Aufrufen von Windows-API. Aber es sieht alles immer noch kompliziert aus. Ich nehme an, dass es keine einfache und schnelle Möglichkeit gibt, .NET-Objekte als COM im Out-of-Process-Server bereitzustellen, und es ist nicht die Architektur der Wahl.

+0

Schöne Beispielverbindung. –