gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 22:50:40 24 4
gpt4 key购买 nike

我有一个从 VB6 程序使用的 COM Callable Wrapper,但该程序不会接收 COM 事件,除非注册了 CCW。否则,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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com