我有一个通过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?