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>

2017年6月1日 (木) 00:00時点における版



個人用ツール
名前空間

変種
操作
案内
ツールボックス