Windows Runtime Cpp 文字列操作 新しいページはコチラ
提供: yonewiki
(→文字列の複製 WindowsDuplicateString(関数)) |
(→文字列の複製 WindowsDuplicateString(関数)) |
||
856行: | 856行: | ||
hStr2文字列の削除に成功しました。 | hStr2文字列の削除に成功しました。 | ||
続行するには何かキーを押してください . . . | 続行するには何かキーを押してください . . . | ||
+ | |||
+ | == '''文字列の複製 WindowsDuplicateString(関数)''' == | ||
+ | 文字列を複製する関数です。コピーとは少し違う動作をします。まずは使い方に関する説明とサンプルと動作結果を示します。 | ||
+ | |||
+ | *'''WindowsDuplicateString(HSTRING型変数,HSTRING型ポインタ変数);''' | ||
+ | |||
+ | 引数: | ||
+ | :'''第1引数''':文字列値を複製したいHSTRING文字列変数を付与する。サンプルでは41行目で使われていて、引数はhStr1となっています。 | ||
+ | :'''第2引数''':第1引数で指定した文字列変数を複製して、新たに文字列値を保持したいHSTRINGポインタ変数(アドレス変数)を付与する。サンプルでは41行目で使われていて、引数は&hStr2となっています。 | ||
+ | |||
+ | <syntaxhighlight lang="cpp" line start="1"> | ||
+ | #include <locale.h> | ||
+ | #include <wchar.h> | ||
+ | #include <stdio.h> | ||
+ | #include <crtdbg.h> | ||
+ | #include <roapi.h> | ||
+ | #include <winstring.h> | ||
+ | |||
+ | |||
+ | int main() { | ||
+ | HRESULT hr; | ||
+ | setlocale(LC_ALL, ""); | ||
+ | |||
+ | hr = RoInitialize(RO_INIT_TYPE::RO_INIT_MULTITHREADED); | ||
+ | if (FAILED(hr)) { | ||
+ | wprintf_s(L"初期化に失敗しました。\n"); | ||
+ | _CrtDbgBreak(); | ||
+ | return 0; | ||
+ | } | ||
+ | else { | ||
+ | wprintf_s(L"初期化に成功しました。\n"); | ||
+ | } | ||
+ | |||
+ | HSTRING hStr1, hStr2; | ||
+ | INT32 i32CompResult; | ||
+ | const wchar_t *cStr1 = L"あきたけん"; | ||
+ | const wchar_t *cStr2 = L"おおさかふ"; | ||
+ | size_t length = wcslen(cStr1); | ||
+ | |||
+ | length = wcslen(cStr1); | ||
+ | hr = WindowsCreateString(cStr1, length, &hStr1); | ||
+ | if (FAILED(hr)) { | ||
+ | wprintf_s(L"hStr1文字列の生成に失敗しました。\n"); | ||
+ | _CrtDbgBreak(); | ||
+ | return 0; | ||
+ | } | ||
+ | else { | ||
+ | wprintf_s(L"hStr1文字列の生成に成功しました。\n"); | ||
+ | } | ||
+ | |||
+ | length = wcslen(cStr2); | ||
+ | hr = WindowsCreateString(cStr2, length, &hStr2); | ||
+ | if (FAILED(hr)) { | ||
+ | wprintf_s(L"hStr2文字列の生成に失敗しました。\n"); | ||
+ | _CrtDbgBreak(); | ||
+ | return 0; | ||
+ | } | ||
+ | else { | ||
+ | wprintf_s(L"hStr2文字列の生成に成功しました。\n"); | ||
+ | } | ||
+ | |||
+ | wprintf_s(L"文字列1 =%s\n", WindowsGetStringRawBuffer(hStr1, nullptr)); | ||
+ | wprintf_s(L"文字列2 =%s\n", WindowsGetStringRawBuffer(hStr2, nullptr)); | ||
+ | wprintf_s(L"hStr1_Address=%p, hStr2_Address=%p\n", hStr1, &hStr2); | ||
+ | |||
+ | hr = WindowsCompareStringOrdinal(hStr1, hStr2, &i32CompResult); | ||
+ | if (FAILED(hr)) { | ||
+ | wprintf_s(L"文字列の比較に失敗しました。\n"); | ||
+ | _CrtDbgBreak(); | ||
+ | return 0; | ||
+ | } | ||
+ | else { | ||
+ | wprintf_s(L"文字列の比較に成功しました。\n"); | ||
+ | } | ||
+ | |||
+ | wprintf_s(L"\n"); | ||
+ | wprintf_s(L"比較結果 =%d\n", i32CompResult); | ||
+ | |||
+ | hr = WindowsDeleteString(hStr2); | ||
+ | if (FAILED(hr)) { | ||
+ | wprintf_s(L"hStr2文字列の削除に失敗しました。\n"); | ||
+ | _CrtDbgBreak(); | ||
+ | return 0; | ||
+ | } | ||
+ | else { | ||
+ | wprintf_s(L"hStr2文字列の削除に成功しました。\n"); | ||
+ | } | ||
+ | |||
+ | hr = WindowsDeleteString(hStr1); | ||
+ | if (FAILED(hr)) { | ||
+ | wprintf_s(L"hStr1文字列の削除に失敗しました。\n"); | ||
+ | _CrtDbgBreak(); | ||
+ | return 0; | ||
+ | } | ||
+ | else { | ||
+ | wprintf_s(L"hStr1文字列の削除に成功しました。\n"); | ||
+ | } | ||
+ | |||
+ | RoUninitialize(); | ||
+ | |||
+ | _wsystem(L"pause"); | ||
+ | |||
+ | return 0; | ||
+ | } | ||
+ | } | ||
+ | </syntaxhighlight> | ||
+ | |||
+ | 実行結果の出力結果 | ||
+ | 初期化に成功しました。 | ||
+ | hStr1文字列の生成に成功しました。 | ||
+ | hStr2文字列の生成に成功しました。 | ||
+ | 文字列1 =あきたけん | ||
+ | 文字列2 =おおさかふ | ||
+ | hStr1_Address=0023B778, hStr2_Address=00CFFB60 | ||
+ | 文字列の比較に成功しました。 | ||
+ | |||
+ | 比較結果 =-1 | ||
+ | hStr2文字列の削除に成功しました。 | ||
+ | hStr1文字列の削除に成功しました。 | ||
+ | 続行するには何かキーを押してください . . . | ||
+ | |||
+ | |||
[[Windows Runtime Cpp]]へ戻る | [[Windows Runtime Cpp]]へ戻る |