STA ATL COM OOP サーバーを開発しましたが、すべて正常に動作します。私たちは問題に直面しています: COM クライアントは Windows メッセージを介して COM 呼び出しの結果を内部的に取得するため、COM 呼び出しの応答を待っている間に WM_PAINT メッセージ (または私が推測するその他のメッセージ) を処理できます。それ自体が問題になる可能性がありますが、大きな問題は、以前の COM 呼び出しが完了するまで、サーバーへのすべての呼び出しが失敗する (HRESULT=0x80010005) ことです。これは、アプリケーションで非常に頻繁に発生するため、非常に大きな問題です。ペイントから COM 呼び出しを削除することはできません。
私はこれについてかなり調査してきましたが、それに関するものは何も見つかりませんでした (問題を述べたこの2006 年の記事と、私たちの場合に適用できないいくつかの解決策を除いて) が、WM_PAINT だけでなく、 Windows イベント (メッセージ) 内で実行するサーバーへの呼び出しは、同じ問題を引き起こす可能性があります。
したがって、基本的にはさまざまな解決策がありますが、どの COM メソッドをどのように使用するかについての手がかりはありません。 1- 最後の COM 呼び出しが処理され、値が返されるまで待機するメソッドサーバーと COM 応答を処理するメソッド (すべてクライアントから呼び出されます) 3- クライアントに IMessageFilter クラスを実装できるかどうか、およびそれを処理して呼び出しを処理する方法などを理解します。
ありがとうございました!