【发布时间】:2013-09-23 04:22:50
【问题描述】:
我们开发了一个 STA ATL COM OOP 服务器,几乎一切正常。我们面临一个问题:当 COM 客户端通过 Windows 消息在内部获取任何 COM 调用的结果时,可以在等待 COM 调用的应答时处理 WM_PAINT 消息(或我猜的任何其他消息)。这本身可能是一个问题,但最大的问题是,在之前的 COM 调用完成之前,对服务器的所有调用都会失败(HRESULT=0x80010005),这是一个相当大的问题,因为它在我们的应用程序中经常发生。我们无法从绘图中移除 COM 调用。
我已经对此进行了大量研究,但找不到任何相关信息(除了 this 2006 文章指出问题和一些无法在我们的案例中应用的解决方案),但我认为没有只有 WM_PAINT 是危险的,我们在任何 Windows 事件(消息)中执行的对服务器的任何调用都可能导致相同的问题。
所以基本上我们可以有不同的解决方案,但不知道使用哪些 COM 方法或如何使用: 1- 等待直到最后一个 COM 调用被处理并返回值的方法 2- 一种知道服务器中是否有待接听电话的方法和一种处理 COM 答案的方法(全部从客户端调用) 3- 知道我们是否可以在客户端实现一个 IMessageFilter 类以及如何处理它和处理调用等等。
谢谢!
【问题讨论】:
标签: c++ atl out-of-process wm-paint imessagefilter