我有一个从 VB6 程序中使用的 COM Callable Wrapper,但除非注册 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();
}
我刚刚意识到的一件事。我在 TheComClass 内的公共事件声明中没有 [ComVisible(true)] 属性。我认为这不是问题,因为我确实在注册事物时收到了事件,但我们会看到......