C# DLL - Events in COM sichtbar machen

25/09/2007 - 22:44 von Chris Oertel | Report spam
Hallo,
ich versuche gerade eine C# DLL zu schreiben, die ich sowohl im .NET Umfeld,
als auch für eine alte COM Anwendung brauche. Auf der .NET Seite bin ich
sauber und bekomme die Events, die ich feuer auch mit. Auf der COM Seite sehe
ich die Events allerdings nicht (allerdings kommen zwei neue Subs hinzu, die
ich so gar nicht nachvollziehen kann: add_EventName und delete_EventName). Da
ich jetzt auch einige Zeit gegoogelt habe, hab ich so langsam den Eindruck,
daß ich den Wald vor lauter Bàumen nicht mehr sehe.
Kann mir jemand sagen, was an folgenden Dummycodefragment noch falsch ist,
daß die Events nicht im COM sichtbar werden?

Dank Euch,
Chris

using System;
using System.Collections.Generic;
using System.Text;
using System.Runtime.InteropServices;

namespace de.coe.components.FormExt
{
[ComVisible(false),
Guid("CA200956-9929-4280-94D5-A1A52954873C"),
InterfaceType(ComInterfaceType.InterfaceIsDual)]
public interface IPIQueryResultView
{
void ShowResult();
}

[ComVisible(false),
Guid("0C820967-72C1-4fb5-8081-7043F1EA49BC"),
InterfaceType(ComInterfaceType.InterfaceIsIDispatch)]
public interface IPIQueryResultViewEvents
{
[DispIdAttribute(0x60020000)]
void FinishedSelectionEvent(Object sender, EventArgs e);
}

[ComVisible(false)]
public delegate void FinishedSelectionEventHandler(Object sender,
EventArgs e);

[GuidAttribute("AE6623A6-87FA-40ca-BB3F-E0BB32873F96"),
ProgId("FormExt.PIQueryResultView"),
ClassInterfaceAttribute(ClassInterfaceType.AutoDual)]
public class PIQueryResultView : IPIQueryResultView
{
public event FinishedSelectionEventHandler FinishedSelectionEvent;

public PIQueryResultView()
{
}

public void ShowResult()
{
FinishedSelectionEvent(this, new EventArgs());
}
}
}
 

Lesen sie die antworten

#1 Frank Dzaebel
26/09/2007 - 08:03 | Warnen spam
Hallo Chris,

ich versuche gerade eine C# DLL zu schreiben, die ich sowohl im .NET
Umfeld,
als auch für eine alte COM Anwendung brauche.



Also normal unter Projekteigenschaften/Erstellen die Assembly
"für COM Interop registrieren" abhaken und
dann fehlt Dir IMHO auch ein [ComVisible(true)] irgendwo,
so ist ja nichts für COM sichtbar.
Wenn alles sichtbar sein soll, unter Projekteigenschaften/
Anwendung/AssemblyInformationen: "Assembly COM
sichtbar machen" abhaken.



AutoDual



Aufgrund der unter unten beschriebenen Versions-
Einschrànkungen würde ich hier von der Verwendung von
AutoDual abraten:

[ClassInterfaceAttribute-Klasse]
http://msdn2.microsoft.com/de-de/li...eattribute(VS.80).aspx

Für kurze NG-Postings kann man mal zeigen, dass es mit
AutoDual sehr einfach geht. Aber nicht mit grösseren Projekten.


ciao Frank
Dipl.Inf. Frank Dzaebel [MCP/MVP C#]
http://Dzaebel.NET

Ähnliche fragen