C# 将事件处理程序附加到动态com对象
在我的应用程序中,我需要动态加载com对象。我通过按程序id加载com实现了这一点。它成功了,而且我能够访问动态加载的com的方法和属性。但在事件处理方面出现了一些问题。 请查找以下代码C# 将事件处理程序附加到动态com对象,c#,events,dynamic,com,com-interop,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 E
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;
}
dynamic ocx=m_axCtrl.GetOcx();//ocx动态加载
ocx.method1()//成功
Event1+=新的EventHandler(EventHandler1);
Event2+=新的EventHandler(EventHandler2);
public void EventHandler1(对象发送者,对象e)//e是class1的类型
{
}
public void EventHandler2(对象发送者,对象e)//e是类2的类型
{
}
公共班级1
{
公共字符串arg1;
公共字符串arg2;
}
公共课2
{
公共字符串arg1;
公共字符串arg2;
公共字符串arg3;
公共字符串arg4;
公共字符串arg5;
公共字符串arg6;
}
在这里,我的第一个事件将启动,而最后一个事件不会启动。我认为这是由于事件参数的不匹配造成的。创建上述类型的事件处理程序时需要处理哪些事情。请帮助我。阅读MSDN上的这篇文章: 以下片段与您的问题相关: COM互操作在您需要的元数据中生成必要的委托 包括在托管客户端中。导入的代理签名 包含接收器事件接口、下划线、事件名称和 单词EventHandler:SinkEventInterface\u EventNameEventHandler 以及: 您可以使用元数据浏览器,如MSIL反汇编程序 (Ildasm.exe),以标识事件委托 请注意,您需要在互操作程序集上使用Ildasm,而不是COM库 这篇文章可能也有帮助: