挂钩进入事件时C#中的COMException

时间:2010-02-11 18:05:49

标签: c# .net events com interop

我在尝试挂​​钩COM对象上的事件时收到COM异常。这是我试图执行的代码。

COMClass a = IComClass as ComClass;
a.SomeEvent += new SomeEvent_EventHandler(MethodNameHere);

第二行使用以下信息抛出COMException类型的异常:

发现了System.Runtime.InteropServices.COMException

Message =“HRESULT异常:0x80040202”

源= “mscorlib程序”

错误码= -2147220990

堆栈跟踪:        在System.Runtime.InteropServices.ComTypes.IConnectionPoint.Advise(Object pUnkSink,Int32& pdwCookie)

有没有人有任何想法,为什么我无法挂钩到COM事件,或者是否有解决COM事件的解决方法?

克里斯

2 个答案:

答案 0 :(得分:4)

问题是事件的界面没有注册。一旦我为事件接口添加了注册表项,就解决了这个问题。我能够使用OLEViewer.exe

获取接口ID信息

答案 1 :(得分:3)

你得到的错误代码是CONNECT_E_CANNOTCONNECT,谷歌很好。它表示COM服务器对您尝试订阅事件处理程序感到不满意。为什么它不是你需要找到的东西。几乎总是需要从组件作者或供应商那里获得帮助。

您可以尝试的一件事是使用Oleview.exe查看类型库,并查看您尝试订阅的事件是否位于标记为默认源接口的dispinterface上。如果不是,请尝试将对象转换为dispinterface类型,然后订阅其事件。