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で統一すりゃ良いんじゃないのかと。