前々から気になっていたことがわかったので、自分へ向けて書き残しておきます。
HKEY_CLASSES_ROOT\CLSID\クラスID以下にInprocHandler32もしくはInprocHandlerというキーが存在することがあります。今までMSDNライブラリのレジストリの説明(InprocHandler32とInprocHandler)しか知らず何なのかさっぱりわかりませんでしたが、ようやくこれは何なのかわかる文書を見付けました。Object Handlers – MSDN Libraryです。片仮名にしてオブジェクトハンドラで検索しても、現時点ではこれに関する有用な日本語のページはほとんど見付かりません。書籍の目次が関の山です。
その文書を読んでみたところ、こういうことのようです。COMオブジェクトがアウトプロセスサーバで(ようするにDLLではなくEXE内に)実装されている場合、インタフェースメソッドの呼出はプロセスを跨いでの通信とります。そのため単なる関数呼出で済んでしまうインプロセスサーバ(DLL内で実装されている場合)と比べ、どうしても時間がかかってしまいます。それでは、インプロセスサーバで行えることはインプロセスで行い、できないことはアウトプロセスに投げようというのがオブジェクトハンドラのようです。そして、OLE32.DLLが既定のハンドラを用意していますが、自分でカスタムハンドラを作ることもでき、その場合にInprocHandler32やInprocHandlerに登録するということのようです。オブジェクトハンドラは基本的にはインプロセスサーバと変わらなさそうな雰囲気がしますが実際のところどうなのでしょう。
まだ書いていませんでしたが、InprocHandler32は32ビット・64ビット用、InprocHandlerは16ビット用です。これはLocalServer/InprocServerでも同じです。
スポンサード リンク |