我用 C# 编写了一个类库,我试图在 VBA (VB6) 中使用它。
创建我的类型库,使用 regasm 在计算机上注册类型库,在 VB6 中创建 .Net 对象的实例,访问属性和调用方法,一切都很好。
但我正在尝试订阅我的类型库中的实例级对象引发的一些事件。
下面是我在 C# 类中声明的一个事件处理程序(它们都是通用事件处理程序)的示例:
public event EventHandler<Events.NewCall> NewCall;
Events.NewCall是继承自 EventArgs 的类,如下所示:
using System;
namespace MySolution.Events
{
/// <summary>
/// A call has been created ready for use
/// </summary>
public class NewCall : EventArgs
{
/// <summary>
/// An automatic property
/// </summary>
public string AutoProperty { get; private set; }
public NewCall(string rawData)
{
//Some logic here
autoProperty = rawData;
}
}
}
我在课堂上提出了这个事件,如下所示:
var checkNewCall = NewCall;
if (checkNewCall != null) { checkNewCall(this, new Events.NewCall("my raw data")); }
在 C# 中,我可以实例化我的电话对象并订阅事件,如下所示:
MySolution.Phone _phone = new MySolution.Phone();
_phone.NewCall += AnEventHandler;
事件处理程序如下所示:
void AnEventHandler(object sender, Splicecom.Events.NewCall e)
{
//Do stuff with e
}
在 VB6 中,我可以像这样实例化我的 Phone 对象:
Dim thisPhone As New MySolution.Phone
键入此电话。没有给我任何智能感知,但我已经习惯了,我的类中的其他方法没有智能感知,但我仍然可以在没有编译/运行时错误的情况下调用它们。
如下所示,我可以看到我想要处理的事件:
但这是MySolution库的智能感知,而不是Phone类的实例thisPhone。
在 VB6 中,如何订阅MySolution.Phone对象的thisPhone实例上的NewCall事件。
我试过这个:
Option Compare Database
Dim WithEvents thisPhone As MySolution.Phone
Private Sub Command0_Click()
thisPhone = New MySolution.Phone
thisPhone.NewCall = MyFunction()
End Sub
Private Sub MyFunction()
'Do stuff
End Sub
当我单击 Command0 时,我收到此错误: