有谁知道怎么在C#中编写带事件的Com组件,然后该组件可以在VB中启用事件。
该程序我已经写好,并可以编写了普通接口函数的com,可是不知道怎么让事件在VB中显示出来,
求高人指导,或者写一些简单有代表性的代码。谢谢。

解决方案 »

  1.   

    看看下面的文章有没有帮助Exposing Com Events - C#
      

  2.   

        [ComVisible(false)]
        public delegate void ReceivedDelegate(int[] indexs, object[] value);    [InterfaceType(ComInterfaceType.InterfaceIsIDispatch)]
        public interface IReceivedEvent
        {
            void OnPanguReceived(int[] indexs, object[] value);
        }
        
        [ComVisible(true)]
        [ClassInterface(ClassInterfaceType.AutoDual)]   
        [ComSourceInterfaces(typeof(IReceivedEvent))]
        public class ComIniDevice:IComIniDevice,IReceivedEvent
        {
            private Dictionary<string,SerialComm> comTable = new Dictionary<string,SerialComm>();        public event ReceivedDelegate OnPanguReceived;
    我写的一部分代码如上,然后在一个成员函数里OnPanguReceived事件进行了调用。
    但是在编译的时候老通不过:错误 1 找不到类型或命名空间名称“ReceivedDelegate”(是否缺少 using 指令或程序集引用?) D:\My Documents\Visual Studio 2005\Projects\ReadPangu\ReadPangu\dataAcqu.cs 38 22 ReadPangu
      

  3.   

    ReceivedDelegate不在上面定义了吗。吧[ComVisible(false)]变成True试一试。
      

  4.   

    哦,上面的错误是前面的错误,应该是这个错误错误 1 “ReadPangu.ComIniDevice”不会实现接口成员“ReadPangu.IReceivedEvent.OnPanguReceived(int[], object[])” D:\My Documents\Visual Studio 2005\Projects\ReadPangu\ReadPangu\ComIniDevice.cs 54 18 ReadPangu
      

  5.   

    或者我在类中不写 基于IReceivedEventD的继承,那么我在VB引用里面,提示“对象不是源自动事件”,不能以事件对象的方式引用。
      

  6.   

    要实现 com 中的连接点接口, 不是那么容易
      

  7.   

    你搜搜 "COM 连接点 接收器"潘爱民的 <com原理和应用> 一书讲的也不少.这些 接口在 .net 类库也有部分的声明:System.Runtime.InteropServices.ComTypes.IConnectionPoint
    等,不过, 有报道说类库中声明的接口有 bug(2.0).//
    你确定要实现 com 事件?
      

  8.   

    必须得实现,我这是做一个类采集到下层的数据,然后以事件的方式触发给调用的程序。
    如果不用事件方式触发,那我可能只能socket了,貌似更麻烦。你说的资料我先看看
      

  9.   

    谢谢楼上诸位的指导,这个问题我已经解决。
    上面的那个错误是这样处理的。
    组件对象要实现com事件,不是通过对事件接口的继承来实现的,而是通过特性定义源接口来实现的。