potisanのプログラミングメモ

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

2021-02-01から1ヶ月間の記事一覧

C++ std::multimap

標準ライブラリのSTLコンテナ、キーの重複を許すマップstd::multimap(以下multimap)についてのメモです。 初期化子リストによる初期化 要素数やキーに対応した値の個数の取得 要素の追加 あるキーを持つ要素の列挙 あるキーを持つ要素をまとめて削除 その…

C++17&Win32 API デバイス情報要素の文字列プロパティ(概要、クラス、クラスGUID、フレンドリーネーム、ハードウェアID)を列挙・整理する

デバイス情報要素の文字列プロパティ(概要、クラス、クラスGUID、フレンドリーネーム、ハードウェアID)を列挙するコードです。再利用可能なコードをUtility.hppへ移動しています。 文字列プロパティ(概要、クラス、クラスGUID、フレンドリーネーム、ハー…

C++17&Win32 API デバイス情報要素のGUID、不透明ハンドル、概要を列挙する

デバイス情報要素のGUID、不透明ハンドル(Opaque Handle)、概要を列挙するサンプルコードです。C++&Win32 API デバイス情報要素のGUIDと不透明ハンドルを列挙するの拡張です。 #include <array> #include <memory> #include <string> #include <numeric> #include <iostream> #include <tuple> #include <list> #pr</list></tuple></iostream></numeric></string></memory></array>…

C++&Win32 API デバイス情報要素のGUIDと不透明ハンドルを列挙する

Windows NT系列でデバイス情報要素のGUIDと不透明ハンドル(Opaque Handle)を列挙するサンプルコードです。 SP_DEVINFO_DATA構造体として取得する 最も単純な方法としてSP_DEVINFO_DATA構造体のまま取得するサンプルコードです。追記:一部のSetup API(Set…

情報量の単位KBの変遷とkB、KiB

Windowsではファイルサイズの単位として「KB」をよく見ます。「1 KB = 1024バイト = 210バイト」と思っていましたが、いつからか「1 KB = 1000バイト = 103バイト」という扱いが増えました。 SI接頭辞としては「k = 103」なので後者が正しく見えますが、この…

C++11 整数→整数の2進接頭辞バイト単位リテラルの定義

C++

C++11から導入されたユーザー定義リテラル(cpprefjp)を使用すると2進接頭辞バイト単位リテラル(KiB等)を定義できます。 1KiBを1024に変換するような整数型への変換は次のように書けます。 constexpr unsigned long long operator""KiB(unsigned long lon…

C++20 Win32 APIでウィンドウにHLSグラデーションを描画する

Win32 APIでウィンドウにHLS色空間のグラデーションを描画するコードです。"win32_hls_color.hpp"ヘッダーファイルのwin32_hls_colorクラスは以前の投稿のコードを使用しています。 右側の画像の一番上に黒い横線がクラス設計か画像処理の問題かは悩んでいま…

C++20 Win32 APIを使用したHLS色空間クラス

Win32 API、具体的にはShell lightweight utility functions(Microsoft Docs)のColorHLSToRGB関数、ColotRGBToHLS関数を使用したHLS色空間クラスです。 std::clampを使っているので動作環境をC++20としていますが、適当に書き換えればC++17以前にも対応で…

C++20 Win32 APIでウィンドウにDIBセクションを描画する

Win32 APIでウィンドウを表示して、CreateDIBSection関数で作成したビットマップを描画するサンプルコードです。 CreateDIBSection関数で作成したビットマップはppvBits引数に与えた変数の内容をビットマップデータとして直接操作できます。ここでは赤と黒の…

C++17 Win32 APIでウィンドウを表示する

Win32 APIでウィンドウを表示するよくあるサンプルコードです。ウィンドウのクライアント領域に青い正方形を描画します。 #include <memory> #define STRICT #define NOMINMAX #include <Windows.h> static const auto MainWindowClassName = L"MainWindow"; static const auto </windows.h></memory>…

R openxlsxでxlsxファイルの名前付き範囲(テーブル)を読み込む

R

Microsoft ExcelやLibreOffice Calcで使用されるxlsxファイルの名前付き範囲(Excelではテーブル含む)はopenxlsxのread.xlsx関数で読み込めます。 ファイル名test.xlsxの名前付き範囲あるいはテーブルTable1は次のコードで読み込めます。結果はデータフレー…

C++17&Win32 API STRRET型出力引数をstd::wstring型で受け取るクラス

Win32 APIで使われるSTRRET型の出力引数をstd::wstring型で受け取るクラスのコードです。 // out_STRRET_into_wstring.hpp #include <string> // 同じwstringを受け取るインスタンスを同時に使用しないでください。 // 次のようなコードは不適切です。 // // std::ws</string>…

C++20 std::numeric_limitsが対応する型の制約

C++

std::numeric_limits<T>はTが対応する型(特殊化する型)ならis_specializedがtrueとなるため、以下のコンセプトでstd::numeric_limits<T>が対応する型に制約できます。 #include <numeric> template <typename T> concept limited_number = std::numeric_limits<T>::is_specialized; 以下</t></typename></numeric></t></t>…

C# 9.0 SpanとMemoryの比較

C#

C# 9.0、System.Memory名前空間のSpanとMemoryの比較です。SpanがIEnumerableに変換できず苦労したことから、現在はMemoryびいきの内容になっています。ReadOnlySpan、ReadOnlyMemoryに関しては適宜読み替えてください。 項目 Span Memory 種類 ref struct s…

C++&Win32 API モジュールハンドル(HMODULE)は実行可能ファイルのメモリマップトファイルアドレス

公式ドキュメントは確認していませんが、Windows NT系列ではモジュールハンドルHMODULEは実行可能ファイルのメモリマップトファイルアドレスらしいです。なので、GetModuleHandleやLoadLibraryで取得したモジュールハンドルをchar型文字列にキャストすると最…

C++&Win32 API 実行ファイルデータ、スタックのアドレスを取得する

実行ファイルデータのアドレスはWin32 APIのGetModuleHandle関数やWinMain関数の引数、スタックのアドレスはローカル変数のアドレスとして取得できます。また、関数のアドレスを取得することで関数が実行ファイルデータとして配置されることが推測できます。…