我在C#中編寫了一個類庫,我正嘗試在VBA(VB6)中使用它。如何在VB6中訂閱實例對象的事件?
所有創建我的類型庫,使用regasm在計算機上註冊類型庫,在VB6中創建.Net對象的實例,訪問屬性和調用方法都很好。
但我想訂閱一些事件,我的類型庫中的實例級對象引發。
下面是我的一個事件處理程序的例子(它們都是通用的事件處理程序)作爲我的C#類中聲明:
public event EventHandler<Events.NewCall> NewCall;
Events.NewCall是從EventArgs的,看上去一類inhereting像這樣:
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中,我可以實例我的電話的物體,像所以:
Dim thisPhone As New MySolution.Phone
打字此電話。不給我任何intellisense,但我習慣了這一點,我沒有爲我的課內其他方法獲得智能感知,但我仍然可以在沒有編譯/運行時錯誤的情況下調用它們。
如下圖所示,我可以看到我想與之合作的事件:
但是,這是因爲這是MySolution而不是在電話的實例庫的智能感知這個類是這個電話。
在VB6中,我怎麼訂閱對MySolution.Phone對象的thisPhone實例新呼叫事件。
我已經試過這樣:
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,我得到這個錯誤:
好的我會試着用一個名爲IPhone的接口,讓我們只希望我不會被起訴! – JMK
@JMK你仍然需要在VB6中正確地「連線」事件 - 請參閱我的回答http://stackoverflow.com/a/12952577/15639 – MarkJ