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

4
在我的应用程序中,我需要动态加载组件对象(com object)。我通过按程序ID(program 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个回答

1

在MSDN上阅读这篇文章: 如何处理由COM源引发的事件

以下代码片段与您的问题相关:

COM互操作会在元数据中生成必要的委托,您可以在托管客户端中使用。导入的委托签名包括接收器事件接口、下划线、事件名称和单词EventHandler: SinkEventInterface_EventNameEventHandler。

以及:

您可以使用元数据浏览器(例如MSIL Disassembler(Ildasm.exe))来识别事件委托。

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

这篇文章也可能有所帮助: 解决.NET互操作性问题


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接