Windows Runtime Cpp 文字列操作のソースを表示
新しいページはコチラ
移動:
案内
,
検索
[[Windows Runtime Cpp]]へ戻る == '''概要''' == 文字列操作関数としてHSTRING型というのが提供されていて、WindowsRuntime関数では、この文字列型を利用するので、この文字列型を一通り覚える必要があるようです。 == '''生成 WindowsCreateString(関数)''' == wchar_t型なんかの、c++言語の文字列操作で使われたような文字列型が生成関数の引数として使われます。例えば以下のようなプログラムで、生成することができます。文字列操作に関する説明は[[C 文字列操作]]とか、そのあたりで連携している項目を参考にして下さい。基礎知識がない人にとっては膨大な基礎の知識が必要になります。L""って何?とか、selocaleって何?という疑問については、ここでは記述しません。37,39行目についてのHSTRING文字列操作関数でまだ説明していない関数なので、後述します。 <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 hStr; wchar_t cStr[] = L"ワイド文字列"; size_t length = wcslen(cStr); hr = WindowsCreateString(cStr, length, &hStr); if (FAILED(hr)) { wprintf_s(L"HSTRING文字列の生成に失敗しました。\n"); _CrtDbgBreak(); return 0; } else { wprintf_s(L"HSTRING文字列の生成に成功しました。\n"); } wprintf_s(L"\n★%s\n\n", WindowsGetStringRawBuffer(hStr, nullptr)); hr = WindowsDeleteString(hStr); if (FAILED(hr)) { wprintf_s(L"hStr文字列の削除に失敗しました。\n"); _CrtDbgBreak(); return 0; } else { wprintf_s(L"hStr文字列の削除に成功しました。\n"); } RoUninitialize(); _wsystem(L"pause"); return 0; } </syntaxhighlight> 実行結果の出力結果 初期化に成功しました。 HSTRING文字列の生成に成功しました。 ★ワイド文字列 hStr文字列の削除に成功しました。 という長いサンプルになってしまいましたが、こういう感じですね。使われているのは、27行目です。 *'''WindowsCreateString(文字列配列先頭アドレス, 文字列調, HSTRING型変数のアドレス);''' 引数: :'''第1引数''':文字列配列先頭アドレス サンプルプログラムでは wchar_t の配列cStrという変数で初期化文字列を与えて生成したものの先頭アドレスを引数にしています。cStr[]配列の先頭アドレスはcStrになります。管理人の場合はpcStrという変数名を使うのが流儀です。配列での初期化をするとポインタ変数としてcStrを宣言した意識が薄れる感じはありますが、そこまで神経質なプログラマはあまりみかけませんね。自分で覚えとけってことっすかね。 :'''第2引数''':文字列の長さをwcslen(cStr)で取得したものをsize_t型の変数lengthに取得していますので、サンプルではlengthを引数にしています。 :'''第3引数''':HSTRING型変数のアドレスを引数にします。 サンプルでは実体化されて宣言されたHSTRING型のhStrのアドレスを受け取るため&hStrとしています。 戻り値: == '''削除 WindowsDeleteString(関数)''' == [[Windows Runtime Cpp 文字列操作#生成 WindowsCreateString(関数)|生成]]のところのサンプルで示しましたが、HSTRING文字列をWindowsCreateStringで生成された文字列変数は削除を宣言するまでメモリが消費されたままになりますので、使い終わったら、削除する関数を使って解放するのが普通です。 *'''WindowsCreateString(HSTRING型変数);''' 引数: :'''第1引数''':削除・メモリ解放したいHSTRING文字列変数を付与する。サンプルでは39行目で使われていて、引数はhStrとなっています。 == '''文字列値格納配列先頭アドレス取得 WindowsGetStringRawBuffer(関数)''' == C++の文字列操作関数なんかで必要な文字列型の先頭アドレスを必要とする関数のために、HSTRING型文字列で格納された文字列を格納している文字列配列の先頭アドレスを取得する関数です。 *'''WindowsCreateString(HSTRING型変数,取得文字数);''' 引数: :'''第1引数''':削除・文字列値を取得したいHSTRING文字列変数を付与する。サンプルでは37行目で使われていて、引数はhStrとなっています。 :'''(第2引数)オプション''':取得した文字列配列格納の先頭アドレスから何文字取得するかを指定する。指定しない場合はnullptrと指定するとよいです。 [[Windows Runtime Cpp]]へ戻る
Windows Runtime Cpp 文字列操作
に戻る。
個人用ツール
ログイン
名前空間
ページ
議論
変種
表示
閲覧
ソースを表示
履歴表示
操作
検索
案内
メインページ
コミュニティ・ポータル
最近の出来事
最近の更新
おまかせ表示
ヘルプ
ツールボックス
リンク元
関連ページの更新状況
特別ページ