c# - .Net CCW 无事件,免注册COM!

标签 c# .net com interop regfreecom

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

可能是什么问题?

也许我的 CCW 构建错误,无法用作“早期绑定(bind)”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();
}

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

最佳答案

在 COM 中,事件不是早期绑定(bind)的。 .NET 中的事件只是委托(delegate)的特殊用法,并且最终只是函数调用,而 COM 事件则涉及更多。

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

关于c# - .Net CCW 无事件,免注册COM!,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/446013/

相关文章:

c# - AddRange() 和 LINQ 复制问题

c# - 将格式为 "property=whatever&property2=whatever"的字符串反序列化为对象

CoUninitialize 函数。如何检查错误以及如何等待完成

c# - 在 .net com 类上运行 regasm.exe

c# - "Action?"关键字是干什么的,是不是代替了ActionResult

c# - 属性为空,即使在代码中设置之后也是如此

c# - 尝试启动监听器套接字

c# - .NET 中的 CoCreateInstance 完全匹配?

c# - 配置基于 .NET 的组件以实现免注册激活

c# - 如何从母版页调用内容页功能