COM里抛出一个事件,可是VB里怎么调用啊?PS:COM的dll是用.net2005写的,函数和属性都已经正常调用成功,只剩下事件了

解决方案 »

  1.   

    Private WithEvents 变量名 As 类名这样定义试试
      

  2.   

    在VB ide环境中选中 按 F2 查看该dll的事件过程,然后按照过程类型写。
    如:
    Sub Encode(Destination() As Byte, Source() As Byte)
      

  3.   

    Dim WithEvents MyDog As CDog CDog  为DLL名
      

  4.   

    已经解决,.NET的代码写的时候有些特殊的声明就可以了
      

  5.   

    要在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 InterfacePublic 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名