potisanのプログラミングメモ

プログラミング素人です。昔の自分を育ててくれたネット情報に少しでも貢献できるよう、情報を貯めていこうと思っています。Windows環境のC++やC#がメインです。

2020-01-01から1年間の記事一覧

WIL GitHub Wiki アドホック範囲ヘルパーの和訳・改変

MicrosoftがGitHubでMITライセンス公開しているWILのGitHub Wikiからアドホック範囲ヘルパーの記事を和訳・改変したものです。素人による翻訳なので、誤訳や著作権上の問題などありましたらご連絡いただけますと幸いです。 アドホック範囲ヘルパー Raymond C…

C++ STLスマートポインタのconst修飾の不思議と解釈

C++

STLのスマートポインタ(std::unique_ptr)のgetメンバー関数がT* get() constと戻り値にconstが存在しないことに悩んでいましたが、以下の質問サイトの回答を読んで腑に落ちました。スマートポインタの指す値をconstにするにはTをconst Tとするようです。 s…

C++17 右辺値参照とRVO

C++

次のコードのs3、s4の逆アセンブリが予想と違いました。 #include <string> int main() { std::wstring s1(L"abc"); std::wstring s2(L"def"); std::wstring s3(s1 + s2); // 一時オブジェクトで初期化 std::wstring s4(std::move(s1 + s2)); // 右辺値参照で初期化 </string>…

WIL GitHub Wiki マクロによるメタプログラミングの和訳・改変

MicrosoftがGitHubでMITライセンス公開しているWILのGitHub Wikiからマクロによるメタプログラミングの記事を和訳・改変したものです。素人による翻訳なので、誤訳や著作権上の問題などありましたらご連絡いただけますと幸いです。 マクロによるメタプログラ…

WIL (Windows Implementation Libraries)関係の記事

MicrosoftがGitHubでMITライセンス公開しているWIL (Windows Implementation Libraries)関連の記事です。現在はGitHub Wikiの和訳・改変と使用例が主です。 GitHub Wikiの和訳・改変 WILの使用例 リンク GitHub Wikiの和訳・改変 RAIIリソースラッパー 文字…

C++ WILとWindows Update Agent APIでWindows Updateの更新履歴(タイトル、説明)を取得する

WILとWindows Update Agent APIでUpdateSearcherを作成・管理してWindows Updateの更新履歴からタイトルと説明を取得するサンプルコードです。タイトルと説明以外には日付等の難しい型が含まれるため、いったん無視しています。 // C++20 #include <iostream> #include <vector></vector></iostream>…

C++ WILとWindows Update Agent APIでWindows Update関連のシステム情報を取得する

WILとWindows Update Agent APIでSystemInformationを作成・管理してWUA API関連のシステム情報(OEMハードウェアサポートリンク、リブート要求)を取得するサンプルコードです。 #include <iostream> #define STRICT #define NOMINMAX #include <Windows.h> #include <wuapi.h> #include <wil/com.h> </wil/com.h></wuapi.h></windows.h></iostream>…

C++ WILとWindows Update Agent APIでWUA APIのバージョンを取得する

WILとWindows Update Agent API(WUA API)でWindowsUpdateAgentInfoを作成・管理してWUA APIのバージョンを取得するサンプルコードです。 // C++20 #include <iostream> #pragma comment(lib, "propsys.lib") #define STRICT #define NOMINMAX #include <Windows.h> #include <propvarutil.h> #i</propvarutil.h></windows.h></iostream>…

C++ VariantToStringの戻り値はCoTaskMem関係

<propvarutil.h>のVariantToString関数は新しく割り当てたメモリを返しますが、そのメモリを解放すべきかどうかの記載が一切ありません。CoGetMallocで取得したIMallocのGetSizeは正しい値を返すので、おそらくCoTaskMemFree関数で解放すればよいのではないかと想像します。</propvarutil.h>…

C++ InitVariantFromStringで作成されるVARIANTはVT_BSTR

InitVariantFromString関数(<propvarutil.h>)はVARIANTをvt == VT_BSTR(vt == 8)で初期化します。Microsoft DocsのVariantClearの記述からVariantClearが解放するのはVT_BSTR、VT_DISPATCH、VT_ARRAYとあるため、VT_LPWSTRやVT_LPSTRは避けられたと考えられます。 #defi</propvarutil.h>…

PowerShell 7 Windows 10 1909でWindowsUpdateProviderは廃止済み?

Google検索でPowerShellではWindowsUpdateProviderモジュールでWindows Updateの情報を取得できるという記事を見つけたのですが、PowerShell 7で以下のコマンドを入力したら空の出力が返されました。 Get-Command -Module WindowsUpdateProvider 窓の杜の記…

WIL GitHub Wiki WinRT&COMラッパーの和訳・改変

MicrosoftがGitHubでMITライセンス公開しているWILのGitHub WikiからWinRT and COM wrappersの記事を和訳・改変したものです。素人による翻訳なので、誤訳や著作権上の問題などありましたらご連絡いただけますと幸いです。 一部のリンク切れは意図的なもので…

WIL GitHub Wiki safe_castの和訳・改変

MicrosoftがGitHubでMITライセンス公開しているWILのGitHub Wikiからsafe_castの記事を和訳・改変したものです。素人による翻訳なので、誤訳や著作権上の問題などありましたらご連絡いただけますと幸いです。 一部のリンク切れは意図的なものです。原文をご…

WIL GitHub Wiki 文字列ヘルパーの和訳・改変

MicrosoftがGitHubでMITライセンス公開しているWILのGitHub Wikiから文字列ヘルパーの記事を和訳・改変したものです。素人による翻訳なので、誤訳や著作権上の問題などありましたらご連絡いただけますと幸いです。 一部のリンク切れは意図的なものです。原文…

WIL GitHub Wiki RAIIリソースラッパーの和訳・改変

2022/9/19:2020/8/25版→2022/3/5版に修正しました(そしてミスをしました)。 MicrosoftがGitHubでMITライセンス公開しているWILのGitHub WikiからRAIIリソースラッパーの記事を和訳・改変したものです。素人による翻訳なので、誤訳や著作権上の問題などあ…

C++20 STLのrangeをvectorに変換する関数

C++20のコンセプトとrangesの学習用コードです。template <std::ranges::range T>のようにtypenameやclassの代わりにコンセプトを指定することで型Tをコンセプトで制限できます。コンセプトにrangeを指定すればrangeをvectorに変換する関数を定義できます。 template <std::ranges::range T>はrequiresで</std::ranges::range></std::ranges::range>…

C# Math.NET Numericsで正規分布に従う乱数の発生と平均の標準誤差の推定量計算

C#

C#ではGitHubでMITライセンス公開されているMath.NET Numericsを使用して、正規分布に従う乱数の発生と記述統計量の計算ができます。計算できる記述統計量には不偏標準偏差も含まれるため、以下のようにして正規分布に従う乱数から平均の標準誤差の推定量を…

C++ STLでwil::out_param相当の機能を実装する

STLにはWILのout_paramに相当する機能がおそらく存在しませんが、簡単な構造体またはクラスを作成すれば同等の機能を得られます。 STLコンテナにまとめて作成する場合 std::pointer_traitsを利用します。ただし、MSVCでstd::pointer_traitsにポインタ以外を…

C++ STLのスマートポインタが&演算子をオーバーロードしないのはshared_ptrのため?

C++によるWindows開発ではATLとSTLが使えます。ATLがメモリ管理クラス(CComPtrやCComHeapPtr)に&演算子を実装して内部ポインタのポインタ取得を可能にしている一方、STLはスマートポインタ(unique_ptrやshared_ptr)に&演算子を実装していません。STLの方…

C++ WILでCOMを扱う

C++でWindows開発する場合、MicrosoftがGitHubでMITライセンス公開するWIL(Windows Implementation Libraries)を使えます。WILはSTLと類似した設計でムーブ(譲渡)や範囲forに対応しており、put()、wil::out_param、wil::out_param_ptrによりATLのような…

JavaScript Uint8ArrayとUint8ClampedArrayの要素の範囲制限方法の違い

Uint8Arrayは要素を0~255(0~0xff)の整数に収める。要素は整数かつ& 0xffで変換される。 Uint8ClampedArrayは要素を0~255(0~0xff)の整数に収める。要素は整数かつ0未満は0、255超過は255に変換される。 Uint8Array.of(255, 256, 257, 258, 0, -1, -2)…

JavaScript TypedArrayのmapメソッドの注意(強制的な型変換)

TypedArray.prototype.map(...) 変換結果がUint8→予想通りの結果 変換結果が文字列等→予想外の結果(e.g. [0, 0, 0, ...]) TypedArray.prototype.mapの戻り値はTypedArrayであり、各要素はTypedArrayの要素型に変換されます。例えばUint8Array.prototype.ma…

ブックマークレットのメモ

ブックマークレット(ブックマークに登録するJavaScript)のメモです。ブックマークやお気に入りに新しい項目を作成してURLにコードを貼り付けることで、処理を実行する項目を作成できます。 CSSセレクタに一致するA要素のリンク先をすべて開く。 クラスがcl…

C# IShellFolder::GetAttributesOfの定義時の注意

追記:IntPtrはnintに置き換えられます。 IShellFolder::GetAttributesOfの最後の引数はマスクにも使われるので戻り値に移動できない。 C#でWin32 APIのIShellFolder::GetAttributesOfメソッドを利用する場合は戻り値をvoid(エラーを手動処理する場合はint…

Python 3 イテレーターを任意の個数複製する(itertools.tee)

あまり使わない関数ですが、標準ライブラリのitertools.tee関数を使うとあるイテレーターから任意の個数の独立したイテレーターを作成できます。イテレーターは要素の取得のみで取得位置を戻せませんが、この関数を使えばある位置のイテレーターを保存できま…

JavaScript オブジェクトの初期化(オブジェクトリテラル)のプロパティサンプル

JavaScriptのオブジェクトの初期化(オブジェクトリテラル)で各種プロパティを設定するサンプルコードです。ここでは初期化のみ扱いますが、各プロパティは作成後も__defineGetter__、__defineSetter__などを使用して設定できます。 let i = 2; // 初期化に…

URL Protocol値を持つProgIDキーエントリの一覧抜粋

Windows 10環境でURL Protocol値を持つProgIDキーエントリの一覧抜粋と列挙用のコードです。意外と多くのProgIDが登録されていました。 iTunes関係は多いので削除しています。Acrobat、Office、Kindle、xbox(プリインストール)、Skype、OneDrive、GitHub、…

JavaScriptの反復処理(反復可能と反復子)はプロトコル

JavaScriptの反復処理はプロトコルとして実装されています。反復処理プロトコルは反復可能プロトコル(Iterable protocol)と反復子プロトコル(Iterator protocol)からなり、これらはオブジェクトが次表の条件を満たすことを求めます。 プロトコルはあくま…

C# シェルの「shell:~」形式からパスを取得する

追記20241011:ITEMIDLISTとパスの取得をまとめた関数のコードを追加投稿しました。 Windowsではシェルに「shell:~」形式の名前を与えると特殊フォルダを開けます。C#でこの形式からパスを取得するには、一度Win32 APIのParseDisplayName関数でアイテムIDリ…

C# Known Folderの表示名と型名を取得する(SHGetFileInfo版)

C# 9(トップレベルステートメント) Main関数(C# 8) 動作確認環境:C# 8.0(.NET Core 3.1)、C# 9.0(.NET 5.0) SHGetKnownFolderIDList→アイテムIDリスト→SHGetFileInfoW→表示名・型名 Win32 APIのSHGetKnownFolderIDListとSHGetFileInfoWを使用してKn…