Laden...

COM Server / Client

Erstellt von Goersch vor 14 Jahren Letzter Beitrag vor 14 Jahren 785 Views
G
Goersch Themenstarter:in
68 Beiträge seit 2008
vor 14 Jahren
COM Server / Client

Hallo,

ich hab ein Problem mit COM von einem C# zu einem C# Programm. Ich hab im Internet und hier gesucht, aber die Frage ist wahrscheinlich zu einfach, oder ich verfolge komplett den falschen Ansatz.

(Umgebung: Visual Studio Express 2008, Vista)

Mein Problem:
Ein Prozess soll ein COM Schnittstelle erhalten. Diese ist entsprechend programmiert und in der Registry duch VS eingetragen.

  • Assembly COM-sichtbar und
  • Assembly signieren sind aktiviert

Wenn ich nun aber versuche, meine Klasse mit
ComKlasse comKlasse;
comKlasse = (ComKlasse)System.Runtime.InteropServices.Marshal.GetActiveObject("Name wie in Registry");
in einem anderen Prozess anzuziehen, erhalte ich die Exception
Vorgang nicht verfügbar. (Ausnahme von HRESULT: 0x800401E3 (MK_E_UNAVAILABLE))

Ich verwende eine COM Schnittstelle von einem anderen Programm (das nicht von mir stammt) - das klappt so.

Wäre toll, wenn mir jemand helfen könnte. Ich mache irgendwas grundlegendes falsch oder hab was wesentliches nich kappiert.

Der Code sieht gekürzt so aus:

[Guid("6D8EC1DB-BBD2-4554-BEF8-CAB1E807DAEE")]
    interface iComKlasse
    {
        void a();
    }

    [Guid("3B31D7EB-2E5F-4217-A101-848A50827E94"), ClassInterface(ClassInterfaceType.None)]
    public class ComKlasse : iComKlasse
    {
       public void a() {}
    }

383 Beiträge seit 2006
vor 14 Jahren

Wenn Du eine .NET-Klasse "COM-sichtbar" machst, dann können nur "echte" COM-Clients darauf zugreifen...keine .NET - Clients.
Wieso muss es COM sein?

G
Goersch Themenstarter:in
68 Beiträge seit 2008
vor 14 Jahren

Als ich von dem anderen Programm die COM - Schnittstelle angezogen hab, war das sehr einfach und in ein paar Minuten erledigt. Deshalb hatte ich überlegt, dass meinem Programm eine COM Schnitstelle auch gut stehen würde 😃 Vor allem, weil das so schön einfach im VS unterstützt wird.

Ich hab zwar auch HttpChannel im Einsatz - das scheint mir aber zu umständlich, da dass richtig dokumentiert werden muss. Die verfügbaren COM Schnittstellen sieht man halt einfach.

Was mir schon aufgefallen war: Ich konnte die ComKlasse zwar in VS sehen (Verweis hinzufügen), aber es gab die Fehlermeldung, dass das nicht geht. Kann ich die COM Schnittstelle denn so verfügbar machen, dass andere Programme die COM Schnittstelle benutzen können ?