C# .Net CCW没有免费注册COM的事件!

C# .Net CCW没有免费注册COM的事件!,c#,.net,com,interop,regfreecom,C#,.net,Com,Interop,Regfreecom,我有一个COM可调用包装器,我正在从VB6程序中使用它,但是除非注册CCW,否则程序不会接收COM事件。否则,CCW工作正常,只是在我删除程序的清单文件并使用“regasm/tlb/codebase theccw.dll”注册CCW之前没有任何事件。这是在WinXP SP3中 有什么问题吗 可能我的CCW构建错误,无法用作“早期绑定”VB6对象。以下是我的声明: [ComVisible(false)] public delegate void AnEventDelegate(int arg1);

我有一个COM可调用包装器,我正在从VB6程序中使用它,但是除非注册CCW,否则程序不会接收COM事件。否则,CCW工作正常,只是在我删除程序的清单文件并使用“regasm/tlb/codebase theccw.dll”注册CCW之前没有任何事件。这是在WinXP SP3中

有什么问题吗

可能我的CCW构建错误,无法用作“早期绑定”VB6对象。以下是我的声明:

[ComVisible(false)]
public delegate void AnEventDelegate(int arg1);

[
ComVisible(true),
GuidAttribute("XXXX-XXXX-XXXX-XXXX"),
InterfaceType(ComInterfaceType.InterfaceIsIDispatch)
]
public interface IComEvents
{
    void AnEvent(int arg1);
}

[
ComVisible(true),
Guid("YYYY-YYYY-YYYY-YYYY"),
ClassInterface(ClassInterfaceType.None), 
ComSourceInterfaces(typeof(IComEvents))
]
public class TheComClass: IComContract
{
    public TheComClass(){}

    // Implicit implementation of IComContract.
    // Implicit implementation of IComEvents.
    // 
    // eg. public event AnEventDelegate AnEvent;
}

[
ComVisible(true),
Guid("ZZZZ-ZZZZ-ZZZZ-ZZZZ")
]
public interface IComContract
{
    [ComVisible(true)]
    string AProp{ get; set; }

    [ComVisible(true)]
    void AMethod();
}

我刚刚意识到一件事。我在ComClass内的公共事件声明中没有[ComVisible(true)]属性。我不认为这是问题所在,因为我确实在注册时获得了事件,但我们会看到…

在COM中,事件不会提前绑定。NET中的事件只是委托的一种特殊用法,最终只是函数调用,而COM事件则更为复杂


您需要为事件注册组件才能工作。

我也遇到了同样的问题,并找到了解决方法

使您的类从System.Windows.Forms.UserControl派生

我已经获得了一个C#编写的COM服务器,可以使用VB6中的事件,即使使用免注册COM


显然,UserControl实现了IOleObject,这在某些情况下是必需的

我发现的唯一答案是,这不起作用,我必须注册CCW