将事件处理程序附加到动态com对象

时间:2014-05-09 11:43:28

标签: c# events dynamic com com-interop

在我的应用程序中,我需要动态加载com对象。我通过程序ID加载com来实现这一点。它成功了,我也能够访问动态加载的com的方法和属性。但是在事件处理的情况下发生了一些问题。 请找到以下代码

dynamic ocx = m_axCtrl.GetOcx(); // ocx dynamic loading
ocx.method1();//success
ocx.Event1+=new EventHandler<object>(EventHandler1);
ocx.Event2+=new EventHandler<object>(EventHandler2);

public void EventHandler1(object sender , object e) // e is type of class1
{

}

public void EventHandler2(object sender , object e) // e is type of class2
{
}


public class class1
{
      public string arg1;
      public string arg2;
}

public class class2
{
    public string arg1;
    public string arg2;
    public string arg3;
    public string arg4;
    public string arg5;
    public string arg6;
}

这里我的第一个事件将会触发,最后一个事件将被激活。我认为这是由于事件参数的错误匹配造成的。在创建上述类型的事件处理程序时需要处理的事情是什么。请帮帮我。

1 个答案:

答案 0 :(得分:1)

在MSDN上阅读本文:How to handle events raised by a COM source

以下摘要与您的问题相关:

  

COM interop在您的元数据中生成必要的委托   包含在您的托管客户端中。导入的委托签名   包括接收器事件接口,下划线,事件名称和   单词EventHandler:SinkEventInterface_EventNameEventHandler。

  

您可以使用元数据浏览器,例如MSIL反汇编程序   (Ildasm.exe),用于识别事件委托。

请注意,您需要在互操作程序集上使用Ildasm,而不是COM库!

这篇文章也可能有用:Troubleshooting .NET interoperability