Framework」。2010)で追加された、アプリケーションに拡張性を持たせることを目的としたフレームワークです。「re-buildなしにアプリケーションの機能拡張ができないか?」との相談を受け、MEFを試してみることにしました。Formアプリケーションの作り方Page2interfaceの定義とその実装Page3フォームに組み込むPage4演算子の追加MEFは.NETライブラリですから、ピュアなC++では使えないけど「ほぼC++」なC++/CLIなら何とかなるんじゃないかと。MEF:はじめの一歩をC++/CLIで踏み出しました。DLL、COM、そしてMEFre-buildなしに機能拡張する手段はずっと以前からあります、WindowsではDLLがおなじみですね。DLLの中には関数名を埋め込むことができ、LoadLibrary()でDLLを読み込んだ後GetProcAddress()に関数名を与えれば、当該関数のアドレスが手に入り/呼び出すことができます。手に入るのは関数のアドレスだけで、引数や戻り値に関する情報はもらえないので決め打ちにするしかありませんし、関数/変数をひとまとめにしたオブジェクト(クラス)を定義して呼び出すこともできません。そこでオブジェクトを定義し呼び出せるCOMの登場となるわけです。COMってシロモノは作る側も使う側もかなりややこしく、決して"お手軽"とは言い難い。MEFによる機能拡張では、拡張したい機能をinterfaceで定義します。機能を提供する側はそのinterfaceを実装したクラスを作ってExport(外に出す/公開する)し、対して機能を利用する側はinterfaceの受け皿を用意して、そこにImport(取り込む)します。MEFは提供(Export)側と利用(Import)側との仲介を行い、両者を結びつけてくれます。Export/Importはクラスや変数にアトリビュート:[Export(~)]/[Import(~)]を付記するだけなので、COMに比べて圧倒的に簡単です。能書きはこれくらいにして、サンプルをお見せしましょう。Formアプリケーションの作り方サンプルに用意したのは、こんな外観の電卓アプリケーション。Formsで作りました。ComboBoxに列挙される演算子をMEFで追加しようという魂胆です。2012以降、C++/CLIによるCLRフォームアプリケーションのひな型がプロジェクトテンプレートから消えてしまいました。作れなくなったわけではありません。寄り道になりますが、フォームアプリケーションの作り方を紹介しておきます。プロジェクトテンプレートでは「空のCLRプロジェクト」を選択します。プロジェクト名は"SimpleCalculator"としましょう。つぎにメニュー:プロジェクト/新しい項目の追加...でWindowsフォームを追加します。フォーム名は"CalculatorForm"で。メニュー:プロジェクト/新しい項目の追加...でC++ファイル(.cpp)、名前を"SimpleCalculator.cpp"としてコードを追加します。これがアプリケーションの入り口であるmain()です。0;}残るはプロジェクト・プロパティの設定。構成プロパティ/リンカー/システム/サブシステムをWindows(/SUBSYSTEM:WINDOWS)に、構成プロパティ/リンカー/詳細設定/エントリポイントをmainとします。ここでビルド/実行し、空っぽのCalculatorFormが現れたら出来上がり。2つのTextBoxとComboBox、Buttonそして大きなLabelを貼り付け、Button-Clickハンドラを用意して電卓フォームの完成です。最後にもう一つ、MEFを提供するアセンブリ:System.ComponentModel.Compositionへの参照を追加しておきます。印刷用を表示ブックマークツイート著者プロフィールεπιστημη(エピステーメー)C++に首まで浸かったプログラマ。圧縮・解凍UNIX基本講座@CodeZine『CodeZine(コードジン)』の公式アカウントです。【NEW】デブスト2019デブサミ2019福岡・関西デブサミ2019夏デブスト関西デブサミ2019×ログインEメールパスワード※旧SEメンバーシップ会員の方は、同じ登録情報(Eメール&パスワード)でログインいただけます。イラストの無断転載を禁じます。記載されているロゴ、システム名、製品名は各社及び商標権者の登録商標あるいは商標です。