[Ruby] AfxOleGetMessageFilter(続き)
まだよくわかっていない。
どのくらいわかっていないかというと、ASRのソースが参考になるのかどうか断定できないくらいにわかっていない。
実現したいことは、python-win32のこの話題と同じこと。
Googleにお伺いしてみたところ、
MFCのOLEのIMessageFilterに関する話題
が見つかった。
どうやら、IMessageFilterを利用するというのは、あながちハズレではなさそう。
以下、まだちゃんと読んでいないのだが、気になったURLのメモ。
IMessageFilterをWin32OLE側で適切に実装して、CoRegisterMessageFilterをコールすれば、python-win32と同じことが実現できる。
...という考え方で正しいんだろうか。
正しいとすれば、ASRのソースが参考になりそうな気がしてきている。
(というよりも、これらの情報を収集するきっかけとなったASRのCRubyWrapperFilter::Initialize()の実装だけでも十分参考になったと言えます。)
ところで、テストスクリプトを書くにはどうすればいいんだろうか...。
| 固定リンク
この記事へのコメントは終了しました。
コメント
Diogoの望みというのは、たとえばExcelやWord(つまり外部サーバー)のバグでループしたりしても警告も何も出さずに待てというようにしてほしいという要望なんでしょうかね?
あのダイアログが役立たずなことは同意しますが、たとえばサーバーが「保存しますか?」ダイアログで停止しているような場合(で、その保存ダイアログがバックグラウンドに隠れているような場合)に、気づくきっかけになりますが、それがないと永遠の待ちになりかねないのですが。
投稿: arton | 2008年4月19日 (土) 22時41分
いや。多分そうじゃなくて正常に処理している場合でも表示されるみたいなので、それをどうにかしたいんだと思います。
http://www.python.jp/pipermail/python-ml-jp/2008-March/004281.html
みたいな例です。
投稿: suke | 2008年4月19日 (土) 23時32分
まったく、再現しないのですが、Charles Loweの特殊事情ということはないでしょうか?
そもそもWin32OLEはMFCを利用していないので、問題のメッセージボックスは出てこない(ということは、Charlesが出している)と思うのですが。
投稿: arton | 2008年4月22日 (火) 03時01分
検証ありがとうございます。
OLEサーバー側がMFC使っているのかと思ってたんですが...
全然、発端となったメールの投稿者には返信してなかったので、一度現象が発生するようなスクリプトを見せてもらえるか返信してみます。
投稿: suke | 2008年4月22日 (火) 21時52分
どうやら Factset API という proprietary なソフトで発生するということのようです...。困ったな。
投稿: suke | 2008年4月27日 (日) 08時54分
あるいはひょっとするとFactsetAPIもMFCでつくられてて、内部で別の長時間かかるOLEな
メソッドを呼んでたりするのかもしれませんね(で、FactsetのMFCがタイムアウトでダイアログを出す)。
Python側でMFCにダイアログ抑止を指令すると、たまたまMFCのDLLが共通だったりして、
FactsetAPI側のMFCにも抑止状態が伝わってしまう、みたいな。MFC見る限り、抑止状態は
スレッドに割りついているので。
投稿: jzkey | 2008年4月28日 (月) 23時17分
なんとなく私もそんな気がしています...
投稿: suke | 2008年5月 4日 (日) 15時53分