我有一个COM Callable Wrapper,我使用VB6程序,但程序不会收到COM事件,除非CCW已注册。否则,CCW会正常工作,除非我删除程序的清单文件并使用“regasm/tlb/codebase theccw.dll”注册CCW,否则不会发生任何事件。这是在WinXP SP3中。.Net CCW没有免注册COM的事件!
可能是什么问题?
也许我的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)]属性。我不认为这是问题,因为我确实在事件被注册时得到事件,但我们会看到...
你知道我在哪里可以阅读更多关于此? – 2009-01-15 09:44:35