用c#中的事件扩展VB6接口



Hi我有一个名为CLSFW_SBSession的vb6接口,其中包含一个事件:

Public Event DataTransfer(ByVal Data As Variant)
Public Property Get ActionID() As Long
End Property
...

我需要用一个c#interop类来扩展它。我尝试过:

[ComVisible(true)]
[Guid("ddb976bd-fe29-44d5-a163-e7780a4bb897")]
public class ClsSbSession : FWBO_LibSrv.CLSFW_SBSession
     public event __CLSFW_SBSession_DataTransferEventHandler DataTransfer;
     ...

现在,如果我在vb6中声明一个这种类型的对象,并在没有With事件的情况下实例化它,它就会工作:

Private session As FWBO_LibSrv.CLSFW_SBSession
Set session = new ClsSbSession()

但如果我使用:

Private WithEvents session As FWBO_LibSrv.CLSFW_SBSession

我试着举个例子:

Set session = new ClsSbSession()

我收到一个错误:

对象或类不支持事件集

如何从c#类的vb6中管理事件?感谢

我有一个vb6接口

这是相当模糊的,VB6不允许声明接口。它确实从VB6类声明生成了它们,它们的名称以下划线开头。应该有两个,一个用于类,可能命名为_CLSFW_SBSession,另一个用于事件。查找这些接口名称的一种方法是从Visual Studio命令提示符下运行Oleview.exe。使用File+View Typelib并选择VB6可执行文件。找到coclass声明,并注意到由[default]和[source]属性标记的接口。

您需要从[默认]接口派生类。并且必须使用[ComSourceInterfaces]属性来命名[source]接口。MSDN的操作指南页面在这里。目前还不清楚为什么要模仿VB6类,只有当您需要一个替代现有VB6类的插件,并且需要保持旧客户端程序的运行时,才有必要这样做。这有额外的要求,比如匹配指南。

最新更新