VB怎么响应COM里的事件啊?

swordbroken 2007-05-15 05:08:53
COM里抛出一个事件,可是VB里怎么调用啊?

PS:COM的dll是用.net2005写的,函数和属性都已经正常调用成功,只剩下事件了

...全文
310 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
swordbroken 2007-05-16
  • 打赏
  • 举报
回复
花了我两天的时间,还好工期不紧张
希望对以后的兄弟有用
Rose2007 2007-05-16
  • 打赏
  • 举报
回复
恭喜楼主自己解决问题
swordbroken 2007-05-16
  • 打赏
  • 举报
回复
要在VB里调用COM的事件,.NET里需要以下的处理:
首先,定义一个Interface,里面有一个和事件相同参数和名称的方法(例子里是PersonEvents),指定如下的属性

Public Delegate Sub PersonEventHandler( ByVal name As String )

' 下面的声明是指定为IDispatch接口
<InterfaceTypeAttribute(ComInterfaceType.InterfaceIsIDispatch)> _
Public Interface PersonEvents
  Sub NameChanged( ByVal name As String )
End Interface

Public Class Person

  Public Event NameChanged As PersonEventHandler
....
End Class


 然后用ComSourceInterfaces属性指定Class的Interface


Public Delegate Sub PersonEventHandler( ByVal name As String )

<InterfaceTypeAttribute(ComInterfaceType.InterfaceIsIDispatch)> _
Public Interface PersonEvents
  Sub NameChanged( ByVal name As String )
End Interface

<ComSourceInterfaces("DotNetCOMTest.PersonEvents, DotNetCOMTest")> _
Public Class Person

  Public Event NameChanged As PersonEventHandler


 ComSourceIntarfaces属性値的参数有两个,第一个是指定事件处理的Interface名,第二个是Interface存在的Assembly名


swordbroken 2007-05-16
  • 打赏
  • 举报
回复
已经解决,.NET的代码写的时候有些特殊的声明就可以了
swordbroken 2007-05-15
  • 打赏
  • 举报
回复
说是不支持WithEvents
Rose2007 2007-05-15
  • 打赏
  • 举报
回复
Dim WithEvents MyDog As CDog

CDog 为DLL名
mndsoft 2007-05-15
  • 打赏
  • 举报
回复
在VB ide环境中选中 按 F2 查看该dll的事件过程,然后按照过程类型写。
如:
Sub Encode(Destination() As Byte, Source() As Byte)
rainstormmaster 2007-05-15
  • 打赏
  • 举报
回复
Private WithEvents 变量名 As 类名

这样定义试试

7,762

社区成员

发帖
与我相关
我的任务
社区描述
VB 基础类
社区管理员
  • VB基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧