potisanのプログラミングメモ

趣味のプログラマーがプログラミング関係で気になったことや調べたことをいつでも忘れられるようにメモするブログです。はてなブログ無料版なので記事の上の方はたぶん広告です。記事中にも広告挿入されるみたいです。

2020-10-01から1ヶ月間の記事一覧

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の定義時の注意

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:~」形式からパスを取得する

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

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…

ShellFolderキーを持つCLSIDキーエントリの一覧

Windows 10環境のOLEScriptキーを持つCLSIDキーエントリの一覧です。一部Office関係等は除外しています。 CLSID 表示名 InProcServer32 {00020D75-0000-0000-C000-000000000046} {0DF44EAA-FF21-4412-828E-260A8728E7F1} Taskbar {38A98528-6CBF-4CA9-8DC0-B…

OLEScriptキーを持つCLSIDキーエントリの一覧

Windows 10環境のOLEScriptキーを持つCLSIDキーエントリの一覧です。 CLSID 表示名 ProgID InProcServer32 {cc5bbec3-db4a-4bed-828d-08d78ee3e1ed} JScript Compact Profile (ECMA 327) JScript.Compact %WINDIR%\System32\jscript.dll {16d51579-a30b-4c8b…

HKEY_CLASSES_ROOTに登録されたCLSIDのサブキー一覧

かなり古いPCでHKEY_CLASSES_ROOTに登録されたCLSIDのサブキーの一覧です。出現回数が5回未満のサブキーは除外しています。 回数 サブキー 5000回以上 InprocServer32 5000回未満100回以上 ProgID、VersionIndependentProgID、TypeLib、Version、Implemented…

C# Dictionaryでキーの大文字小文字を同一視する

C#

本文 Dictionaryクラスはコンストラクタの引数に次のいずれかを与えることでキーの大文字小文字の区別を指定できます。区別の方法は与えた変数により異なります(リファレンス参照)。 StringComparer.OrdinalIgnoreCase StringComparer.InvariantCultureIgn…

SourceBrowser:.NET Framework、Roslyn、.NET Core、Azure

C#

対象 URL 備考 .NET Framework https://referencesource.microsoft.com/ .NET Frameworkは.NET Coreに統合された。 Roslyn http://sourceroslyn.io/ .NET Core https://source.dot.net/ Azure http://sourcebrowser.azurewebsites.net/ SourceBrowser - GitH…

C# PEファイルのMS-DOSヘッダとNTヘッダのシグネチャをメモリマップトファイルで読み込む

C#

PEファイルのMS-DOSヘッダ(IMAGE_DOS_HEADER)とNTヘッダ(IMAGE_NT_HEADERS)のシグネチャをメモリマップトファイルで読み込むサンプルコードです。IMAGE_DOS_HEADERは固定長配列を含むため、マーシャリングとGCHandleを利用しています。IMAGE_NT_HEADERS…