MindScape

  博客园 :: 首页 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::
  44 随笔 :: 17 文章 :: 48 评论 :: 4 引用

公告

2004年2月2日 #

有些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)

posted @ 2004-02-02 22:33 Jonny Yu 阅读(2057) 评论(0) 编辑

第一个Post, 还没想到要写什么,先随便说一些吧。

posted @ 2004-02-02 20:43 Jonny Yu 阅读(298) 评论(0) 编辑