@egtraイグトランスの頭の中(のかけら)ActiveBasicを中心にプログラミングの話をぼちぼちと。Qiitaの16日目の記事です。インタフェースをマーシャリングできるようにするには、レジストリかマニフェスト、あるいはCoRegisterPSClsid関数でプロキシ・スタブのクラスを登録しなければなりません。それらの解説はほかに譲り、今日はそのような処理を行っていないインタフェースをマーシャリングしようとするとどうなるかという話です。いうプログラムを出します。このコードでは、マーシャリング非対応のインタフェースIHogeを作っています。IUnknownとしてマーシャリングし、QueryInterfaceでIHogeを読み出そうとしています。}これの実行結果は次のとおりです。00800040020x80004002はE_NOINTERFACEです。困ったことにオブジェクトがインタフェースを実装していないのと区別がつきません。そのため、ヌルポインタのはずがないと想定しているところにヌルがやってきて訳が分からない、と調べてみたら、レジストリやマニフェストにミスがあったということが時たまあります。(REGDB_E_IIDNOTREG)が返ってきます。std::endl;もちろん、CoMarshalInterThreadInterfaceInStreamに限らず、他の手段でマーシャリングする場合も同じです。Table(ATL::CComGITPtr使用)による例です。(0x80004002)になります。}というわけで、マーシャリング先でのQueryInterfaceでE_NOINTERFACEが返ってきたら、マーシャリングの失敗の可能性も疑いましょうという話でした。コメントをキャンセルメールアドレスが公開されることはありません。WPThemes.Info。