有些ActiveX控件的事件机制是使用IDispatch接口的default method实现的,在.NET中如何使用这样的事件回调呢?
1)?定义一个类,定义事件处理的方法并加上属性标识它是该类的IDispatch接口缺省方法,下面是一个例子:
Public Class Interop
Public Sub onMouseOver()
MessageBox.Show("MouseOver")
End Sub
End Class
2) 但是如果你直接写
IHTMLDocument2 doc = axWebBrowser1.Document
doc.onmouseover = New Interop
那在运行时会得到一个NOT_IMPLEMENTED的异常,因为默认情况下.NET 的Interop Marshaller会将marshal成VT_UNKNOWN类型的Variant,而我们这里需要marshal成VT_DISPATCH的Variant。我们可以使用.NET提供的DisptachWrapper来解决这个问题。
doc.onmouseover = New DispatchWrapper(New Interop)
当你不再需要处理这个事件时,你可以使用下面的方法把该event handler断开。
doc.onmouseover = New DispatchWrapper(Nothing)
转载于:https://www.cnblogs.com/jonnyyu/archive/2004/02/02/711.html