Windows Runtime Cpp ランタイムオブジェクト生成のソースを表示
新しいページはコチラ
移動:
案内
,
検索
== '''概要''' == RoActiveInstanceという関数でランタイムオブジェクトをDLLから生成できるようになっています。以下のように聞いたことのないようなIInspectable型変数を引数にとる形式になっています。 *'''RoActiveInstance'''(HSTRING型変数, IInspectable型ポインタ変数のポインタ変数) 第一引数:オブジェクトクラス名を保持したHSTRING型の変数です。 第二引数:IInspectable型の変数に生成されたランタイムオブジェクトを受け取ります。この変数はCOMの技術を継承した変数です。 ラインタイムオブジェクトを生成する上記の関数を利用するには#include <windows.ui.xaml.h>として、ヘッダファイルを読み込む必要があります。このヘッダファイルを読み込むことで多くのぶら下がっているヘッダファイルも読み込まれる仕組みになっています。デフォルトではライブラリはC:\Program Files (x86)\Windows Kits\8.1\Include\winrtとかに保存されているはずです。 いかに示すサンプルでは IApplication型のポインタ変数を作成し、これのアドレスを引数とすることでIInspectable型ポインタ変数のポインタ変数(アドレス変数のアドレス変数)としています。安全にキャストできるらしいです。IInspectable,IApplicationはいずれもCOMの技術を利用したものです。IApplication型は名前空間ABI::Windows::UI::Xaml;に定義されている変数です。 <syntaxhighlight lang="cpp" line start="1"> #include <locale.h> #include <wchar.h> #include <stdio.h> #include <vector> #include <algorithm> #include <crtdbg.h> #include <roapi.h> #include <winstring.h> #include <windows.ui.xaml.h> using namespace ABI::Windows::UI::Xaml; int main() { HRESULT hr; setlocale(LC_ALL, ""); GetCurrentTime(); hr = RoInitialize(RO_INIT_TYPE::RO_INIT_MULTITHREADED); if (FAILED(hr)) { wprintf_s(L"初期化に失敗しました。\n"); _CrtDbgBreak(); return 0; } else { wprintf_s(L"初期化に成功しました。\n"); } const wchar_t *pcStrClassName = RuntimeClass_Windows_UI_Xaml_Application; size_t sizeStrClassName = wcslen(pcStrClassName); HSTRING HSTRING_StrClassName; HRESULT HRESULT_Hr; HRESULT_Hr = WindowsCreateString(pcStrClassName, sizeStrClassName, &HSTRING_StrClassName); if (FAILED(HRESULT_Hr)) { wprintf_s(L"HSTRING_StrClassNameの生成に失敗しました。\n"); _CrtDbgBreak(); return 0; } else { wprintf_s(L"HSTRING_StrClassNameの生成に成功しました。\n"); } IApplication *pIApplicationObj; HRESULT_Hr = RoActivateInstance(HSTRING_StrClassName, (IInspectable**)&pIApplicationObj); if (FAILED(HRESULT_Hr)) { wprintf_s(L"HSTRING_StrClassNameのRuntimeObject生成に失敗しました。\n"); _CrtDbgBreak(); return 0; } else { wprintf_s(L"HSTRING_StrClassNameのRuntimeObject生成に成功しました。\n"); } HSTRING HSTRING_GetStrClassName; HRESULT_Hr = pIApplicationObj->GetRuntimeClassName(&HSTRING_GetStrClassName); if (FAILED(HRESULT_Hr)) { wprintf_s(L"HSTRING_StrClassNameの取得に失敗しました。\n"); _CrtDbgBreak(); return 0; } else { wprintf_s(L"HSTRING_StrClassNameの取得に成功しました。\n"); } ULONG ULONG_IidCnt; IID *pIID_Iids; HRESULT_Hr = pIApplicationObj->GetIids(&ULONG_IidCnt, &pIID_Iids); if (FAILED(HRESULT_Hr)) { wprintf_s(L"IIDの取得に失敗しました。\n"); _CrtDbgBreak(); return 0; } else { wprintf_s(L"IIDの取得に成功しました。\n"); } for (ULONG ULONG_i = 0; ULONG_i < ULONG_IidCnt; ULONG_i++) { wprintf_s(L"IID[%d]=%x-%x-%x-", ULONG_i, (pIID_Iids + (int)ULONG_i)->Data1, (pIID_Iids + (int)ULONG_i)->Data2, (pIID_Iids + (int)ULONG_i)->Data3); for (int iN = 0; iN < 8; iN++) { wprintf_s(L"%x", *((pIID_Iids + (int)ULONG_i)->Data4 + iN)); } wprintf_s(L"\n"); } wprintf_s(L"\n"); RoUninitialize(); _wsystem(L"pause"); } </syntaxhighlight>
Windows Runtime Cpp ランタイムオブジェクト生成
に戻る。
個人用ツール
ログイン
名前空間
ページ
議論
変種
表示
閲覧
ソースを表示
履歴表示
操作
検索
案内
メインページ
コミュニティ・ポータル
最近の出来事
最近の更新
おまかせ表示
ヘルプ
ツールボックス
リンク元
関連ページの更新状況
特別ページ