Windows Runtime Cpp 文字列操作 新しいページはコチラ
提供: yonewiki
(→文字列のNULL値確認 WindowsStringHasEmbeddedNull(関数)) |
(→文字列のNULL値確認 WindowsStringHasEmbeddedNull(関数)) |
||
| 1,122行: | 1,122行: | ||
続行するには何かキーを押してください . . . | 続行するには何かキーを押してください . . . | ||
| + | |||
| + | == '''文字列のバッファ確保 WindowsPreallocateStringBuffer(関数)''' == | ||
| + | 不変のHSTRING型として文字列を生成する前に、変更可能なPWSTR型文字列変数の文字列領域を確保すると同時に、変更可能な形式のHSTRING_BUFFER型に関連付ける関数です。 | ||
| + | |||
| + | *'''WindowsPreallocateStringBuffer(確保する領域の大きさ,PWSTR型アドレス変数,HSTRING_BUFFER型アドレス変数);''' | ||
| + | |||
| + | 引数: | ||
| + | :'''第1引数''':確保する文字列変数PWSTRの大きさを指定します。サンプルでは55行目で使われていて、引数は10となっています。 | ||
| + | :'''第2引数''':PWSTR型のアドレス変数を指定します。この変数が文字列バッファとして、HSTRING_BUFFERと連動し、機能します。サンプルでは55行目で使われていて、引数は&PWSTR_Bufferとなっています。 | ||
| + | :'''第3引数''':HSTRING_BUFFER型のアドレス変数を指定します。第二引数の変数と連動するように機能します。サンプルでは55行目で使われていて、引数は&HSTRING_BUFFER_Bufferとなっています。 | ||
| + | |||
| + | <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 HSTRING_String = NULL; | ||
| + | HSTRING_BUFFER HSTRING_BUFFER_Buffer = NULL; | ||
| + | PWSTR PWSTR_Buffer = NULL; | ||
| + | |||
| + | hr = WindowsPreallocateStringBuffer(10, &PWSTR_Buffer, &HSTRING_BUFFER_Buffer); | ||
| + | if (FAILED(hr)) { | ||
| + | wprintf_s(L"PWSTRおよびHSTRING_BUFFER文字列(10)の確保に失敗しました。\n"); | ||
| + | _CrtDbgBreak(); | ||
| + | return 0; | ||
| + | } | ||
| + | else { | ||
| + | wprintf_s(L"PWSTRおよびHSTRING_BUFFER文字列(10)の確保に成功しました。\n"); | ||
| + | } | ||
| + | |||
| + | wsprintf(PWSTR_Buffer, L"文字列の出力"); | ||
| + | |||
| + | if(SUCCEEDED(hr)) | ||
| + | { | ||
| + | hr = WindowsPromoteStringBuffer(HSTRING_BUFFER_Buffer, &HSTRING_String); | ||
| + | if (FAILED(hr)) { | ||
| + | wprintf_s(L"HSTRING_Stringの生成に失敗しました。\n"); | ||
| + | _CrtDbgBreak(); | ||
| + | return 0; | ||
| + | } | ||
| + | else { | ||
| + | wprintf_s(L"HSTRING_Stringの生成に成功しました。\n"); | ||
| + | } | ||
| + | wprintf(L"\n"); | ||
| + | wprintf(L"HSTRING_String文字列=%s\n",WindowsGetStringRawBuffer(HSTRING_String, nullptr)); | ||
| + | wprintf(L"\n"); | ||
| + | } | ||
| + | |||
| + | WindowsDeleteString(HSTRING_String); | ||
| + | |||
| + | RoUninitialize(); | ||
| + | |||
| + | _wsystem(L"pause"); | ||
| + | |||
| + | return 0; | ||
| + | } | ||
| + | </syntaxhighlight> | ||
| + | |||
| + | 実行結果の出力結果 | ||
| + | 初期化に成功しました。 | ||
| + | PWSTRおよびHSTRING_BUFFER文字列(10)の確保に成功しました。 | ||
| + | HSTRING_Stringの生成に成功しました。 | ||
| + | |||
| + | HSTRING_String文字列=文字列の出力 | ||
| + | |||
| + | 続行するには何かキーを押してください . . . | ||
[[Windows Runtime Cpp]]へ戻る | [[Windows Runtime Cpp]]へ戻る | ||