@egtraイグトランスの頭の中(のかけら)ActiveBasicを中心にプログラミングの話をぼちぼちと。Qiitaの24日目の記事です。API)を使うサンプルコードも取り上げようと思いました。APIを使うサンプルコードです。}どれくらいCOMかというと、上記のI~型はみな元を辿るとIUnknownになるインタフェースなのでATL::CComPtrで扱えますし、関数の戻り値はHRESULTなのでATLENSURE_SUCCEEDEDマクロ(失敗値なら例外を投げる)が使えるというくらいCOMです。上記に相当するC++/CXのコードを下に載せます。APIには、CoGetClasObjectに相当するRoGetActivationFactoryとCoCreateInstanceに相当するRoActivateInstanceがあります。今回使っているのは見てのとおりRoGetActivationFactoryです。(CLSID)から文字列になりました。RuntimeClass_Windows_Data_Json_JsonObjectはヘッダファイルでL”Windows.Data.Json.JsonObject”と定義されています。RoGetActivationFactoryから得られるオブジェクトは、IClassFactoryに相当するIActivationFactoryのほか、場合によってクラス固有のインタフェースを実装しています。I(クラス名)RuntimeClassFactory仮引数を持つコンストラクタがある場合(このインタフェースにコンストラクタを呼び出すメソッドが定義される)I(クラス名)Staticsstaticメンバーを持つ場合これらのインタフェースの定義は、ABI名前空間の中に元々と同じ名前空間の階層が作られた中にあります。SDKには<名前空間名.h>のヘッダでこれらが定義されています。今回は、JsonObject.TryParse静的メソッドのため、<windows.data.json.h>のABI::Windows::Data::Json::IJsonObjectStaticsを使っています。あとは、上のコードを眺めていれば気付くことも多いと思いますが、こんな感じです。文字列はHSTRINGで取り扱う(HStringReferenceは書き換え不可文字列のラッパークラスです)。boolean;になっている。クラスに対応するインタフェースI(クラス)が定義されている。戻り値がHRESULTになり、本来の戻り値は最後の引数に移動している。ファイルを作成するに書かれている手順で、同様のヘッダーファイルが得られるのだと思います。WinRTをC++から使うコードのほとんどがスマートポインタとしてMicrosoft::WRL::ComPtrを使っていることは認識しています。今回は従来のCOMっぽさの演出のため、意図してATL::CComPtrを使いました。APIクラスを見つけることでした。appsを眺め、簡単に使えそうなものを探しました。Clipboard.SetContentは成功するけどなぜか機能しない、Clipboard.GetContentは非同期だから面倒、などという具合でちょうど良いものを見つけるまでに難航しました。明日はいよいよ最後、予告どおりCoUninitializeに関する話の予定です。コメントをキャンセルメールアドレスが公開されることはありません。WPThemes.Info。