在Interop库的COM对象上使用GetEvent

时间:2016-12-09 16:47:05

标签: c# .net reflection com com-interop

我有一个通过GetType()返回的COM对象.Invoke()。我可以看到对象属性/方法/字段,但不能看到事件:

object obj = invoker.Invoke("MethodReturnsObject");
foreach (EventInfo i in obj.GetType().GetEvents()) {
    Console.WriteLine(i); // doesn't print anything
}

参考文献中的库“嵌入互操作类型”设置为True。使用对象浏览器,我可以看到对象确实有我感兴趣的事件,并且它们被声明为public。我还可以在Interop库中看到ildasm.exe中的事件。

基本上我要做的是在获取EventInfo并创建委托后,在运行时向对象添加一个新的事件处理程序:

EventInfo info = obj.GetType().GetEvent("SomeEvent");
Delegate deleg = Delegate.CreateDelegate(info.EventHandlerType, someMethodInfo);
info.AddEventHandler(obj, deleg);

我正在两台不同的PC上编译和运行,是不是在其他机器上看不到Interop dll?我的印象是Embed Interop Type处理这个问题,或者是否有必要使用regasm / gacutil?

0 个答案:

没有答案