在C#中钩取事件时出现COMException异常

6

尝试在COM对象上挂钩事件时,我收到了一个COM异常。以下是我尝试执行的代码:

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

第二行代码引发了COMException类型的异常,并包含以下信息:

System.Runtime.InteropServices.COMException was caught

Message="Exception from HRESULT: 0x80040202"

Source="mscorlib"

ErrorCode=-2147220990

StackTrace: at System.Runtime.InteropServices.ComTypes.IConnectionPoint.Advise(Object pUnkSink, Int32& pdwCookie)

是否有人知道为什么我无法挂钩COM事件,或者是否有解决方法可以挂钩COM事件?

2个回答

4
问题在于事件接口未注册。一旦我添加了事件接口的注册表键,问题就得到了解决。我使用OLEViewer.exe能够获取接口ID信息。

3
你得到的错误代码是CONNECT_E_CANNOTCONNECT,这是一个与Google相关的问题。它表示COM服务器对你尝试订阅事件处理程序不满意。为什么会这样,你需要找出原因。几乎总是需要从组件作者或供应商那里获得帮助。
你可以尝试的一件事是使用Oleview.exe查看类型库,并找出你尝试订阅的事件是否在标记为默认源接口的dispinterface上。如果不是,请将对象强制转换为dispinterface类型,然后订阅其事件。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接