在我的应用程序中,我需要动态加载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;
}
这里我的第一个事件将会触发,最后一个事件将被激活。我认为这是由于事件参数的错误匹配造成的。在创建上述类型的事件处理程序时需要处理的事情是什么。请帮帮我。
答案 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。