Erzeuge COM Surrogate Server (exe) in C #

8

Ich kann eine COM-DLL (eine Klassenbibliothek) in C # erstellen. Ist es möglich, eine COM-Ersatz-EXE mit C # zu erstellen?

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

    
santhosh 18.05.2009, 14:15
quelle

3 Antworten

5

Der Standard-Surrogatprozess für COM - das, was COM-DLLs hostet, aka das COM Surrogate - ist dllhost.exe. Es ist möglich, einen Ersatzprozess in C ++ zu erstellen. In diesem Artikel wird erklärt, wie.

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

Ich sehe ein paar Optionen.

  1. Das Visual Studio SDK , ein kostenloser Download für Entwickler, die Visual Studio erweitern möchten. Innerhalb dieses SDK gibt es eine Klassenbibliothek, die solche Wrapper hat. Sehen Sie sich insbesondere die ISurrogate-Klasse an.
    ABER, die VS SDK-Lizenz sagt, dass das SDK in Ordnung ist, only 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 für den allgemeinen App-Aufbau nicht geeignet ist.
    Die einzige verbleibende Frage ist, genau wie verwenden Sie das VS SDK technisch, um ein COM-Surrogat nur mit C # -Code zu erstellen? Auch hier, ich weiß es nicht. Ich habe in den Dokumenten kurz nach Anleitungen zur Verwendung des ISurrogate-Wrappers gesucht, aber keine gefunden.
  2. Verwenden Sie den Code in diesem Artikel .
    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.
Cheeso 18.05.2009 16:59
quelle
4

Ich wollte dasselbe machen und fand ein exzellentes Projektbeispiel CSExeCOMServer im 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.

    
Boris Zinchenko 23.05.2010 07:06
quelle
2

Eine Option, wenn Sie eine prozessexterne COM-Komponente haben möchten, besteht darin, eine DLL in COM + über Servicekomponenten . 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, dass jemand mir einen direkteren Weg (ohne COM +) gezeigt hat, aber ich kann mich nicht für das Leben von mir erinnern, was es war ...

    
Marc Gravell 18.05.2009 15:33
quelle

Tags und Links