Windows Runtime Cpp ランタイムオブジェクト生成 新しいページはコチラ
提供: yonewiki
(→概要) |
(→概要) |
||
11行: | 11行: | ||
− | + | いかに示すサンプルでは | |
− | IApplication | + | 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> |