2005/12/14 水曜日

COMのイベントを別スレッドから発生させる

カテゴリー: おぼえ書き — ryu @ 20:21:36

COMのInterfaceポインタはスレッドコンテキストに依存する。
何も考えずに別スレッドからFire_~Eventを呼ぶと、
たまにアクセス違反の起こるCOM Objectが出来ること請け合いである。

昔は資料もなくスレッドからSendMessageでAtlControlへ投げて、
Delegate的にそこからFireしてなんて逃げを打ったことも有ったけど、
本当はマーシャリングしてIntrefaceポインタを渡すのが正解

CoMarshalInterThreadInterfaceInStream
CoGetInterfaceAndReleaseStream

辺りか。

NTのSP3以降だとGITを使うことも出来る。らしい。

WritePtrToGlobalVariable
ReadPtrFromGlobalVariable

SP3って1998年1月か。あのころはSP3じゃなかったなぁ(笑

Essential COMで解説されているけど、
当時これが有れば苦労しなかっただろうにと思ったり。
Dr. GUI と COM イベント:第 2 部

過ぎ去りし日々に思いを馳せつつ。

思い出した。

MFC+ATL使ってるコントロールも見かけるけど意味不明(w
# MFC+ATL+STLとか誰が保守するの?みたいなのはさすがに無いと思うけど
MFC使うとサイズが巨大になるのに軽量なコンポーネント作成を意図している
ATL使うのは何を意図しているのかわかんない。
Doc/View使うようなSDI/MDIのアプリならそれもありだけど、
それならMFCで統一すりゃ良いんじゃないのかと。

31 queries. HTML convert time: 0.719 sec. Powered by WordPress 2.8