@egtraイグトランスの頭の中(のかけら)ActiveBasicを中心にプログラミングの話をぼちぼちと。Qiitaの11日目の記事です。ときには、アパートメントを越えてオブジェクトを受け渡すことがあります。その用途のAPIのうち、プロセス内でのやりとりに特化したものの一覧です。いずれも、オブジェクトへの参照を表現する何らかの間接的なデータを受け渡す仕組みです。送り先のアパートメントでは、そのデータからマーシャルされたオブジェクト(プロキシ)への参照を得ることになります。1文目にアパートメント間で受け渡すデータの種類を記しました。CoMarshalInterfaceIStreamでやり取りします。オプション次第で、プロセス内にもプロセス間・コンピュータ間にも使えます。CoMarshalInterThreadInterfaceInStreamIStreamでやり取りします。CoMarshalInterfaceをラップして簡素化したものです。(GIT)DWORD値(クッキー)でやり取りします。(COM)RoGetAgileReferenceIAgileReferenceでやり取りします。8.1で追加されました。MSDNライブラリ該当ページで書かれているように、GITより効率が良くなるよう改良されています。私は、ATL::CComGITPtrクラステンプレートとしてGITをよく使います。CoInitializeExなどをしていない外側でコピーコンストラクタ・コピー代入をしない(ムーブなら問題ない)ということさえ気を付ければ、簡単にアパートメントを越えて持ち運べます。このほか、ATLにはCoMarshalInterfaceの系統をラップした関数もあります(MSDNライブラリ:マーシャリングに関するグローバル関数)。AtlFreeMarshalStreamです。ATL::CComGITPtrほど扱いやすくなっておらず、また私が知ったのはATL::CComGITPtrよりずっと後だったこともあり、使ったことがありません。コメントをキャンセルメールアドレスが公開されることはありません。WPThemes.Info。