@egtraイグトランスの頭の中(のかけら)ActiveBasicを中心にプログラミングの話をぼちぼちと。Templates.コメントなしATLでCOMオブジェクトを作る話の続きです。今回で一応終わります。ATLでCOMインタフェースを実装するコード例ATLでCOMオブジェクトを作る関数を作るATLでCOMインタフェースを実装するC++クラスを作っていて遭遇した、次なる壁は引数を持つコンストラクタでした。ATL::CComObjectRootExから派生したクラスで、引数を取るコンストラクタを持たせたいと思いました。そんなことができるようにはなっていません。これがATL::CComObjectのコンストラクタです。基底クラス(CComObjectRoot(Ex)から派生した自作クラス)にコンストラクタ引数を渡す余地はありません。}仕方がないのでATL::CComObjectに代わるクラスを自作してしまいました。それが今回の内容です。変更点はコンストラクタを以下のように変えたこと、それだけです(実際には、CreateInstanceやテンプレート版QueryInterfaceなど一部を面倒なので除外しています)。{}以下コード全体です。前回作ったCreateComObject関数も可変長引数に修正してあります。C++で使うことを一応考えているためです。2013からです)ので、まずはそっちの対処を考えなければならないのですが。コンストラクタの時点ではAddRef/Release/QueryInterfaceは使用できません。ATLのCComObjectなどでも同じです。IUnknownとしての操作が必要なら、DECLARE_PROTECT_FINAL_CONSTRUCTを定義して、FinalConstruct関数で書きましょう。なんだか、だんだんATLに頼らないでコードを書くという結果になってしまいました。2014年2月16日追記:CraeteComObjectからCreateComObjectに書き間違いを直しました。コメントをキャンセルメールアドレスが公開されることはありません。WPThemes.Info。