2021-02-01から1ヶ月間の記事一覧
標準ライブラリのSTLコンテナ、キーの重複を許すマップstd::multimap(以下multimap)についてのメモです。 初期化子リストによる初期化 要素数やキーに対応した値の個数の取得 要素の追加 あるキーを持つ要素の列挙 あるキーを持つ要素をまとめて削除 その…
デバイス情報要素の文字列プロパティ(概要、クラス、クラスGUID、フレンドリーネーム、ハードウェアID)を列挙するコードです。再利用可能なコードをUtility.hppへ移動しています。 文字列プロパティ(概要、クラス、クラス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>…
Windows NT系列でデバイス情報要素のGUIDと不透明ハンドル(Opaque Handle)を列挙するサンプルコードです。 SP_DEVINFO_DATA構造体として取得する 最も単純な方法としてSP_DEVINFO_DATA構造体のまま取得するサンプルコードです。追記:一部のSetup API(Set…
Windowsではファイルサイズの単位として「KB」をよく見ます。「1 KB = 1024バイト = 210バイト」と思っていましたが、いつからか「1 KB = 1000バイト = 103バイト」という扱いが増えました。 SI接頭辞としては「k = 103」なので後者が正しく見えますが、この…
C++11から導入されたユーザー定義リテラル(cpprefjp)を使用すると2進接頭辞バイト単位リテラル(KiB等)を定義できます。 1KiBを1024に変換するような整数型への変換は次のように書けます。 constexpr unsigned long long operator""KiB(unsigned long lon…
Win32 APIでウィンドウにHLS色空間のグラデーションを描画するコードです。"win32_hls_color.hpp"ヘッダーファイルのwin32_hls_colorクラスは以前の投稿のコードを使用しています。 右側の画像の一番上に黒い横線がクラス設計か画像処理の問題かは悩んでいま…
Win32 API、具体的にはShell lightweight utility functions(Microsoft Docs)のColorHLSToRGB関数、ColotRGBToHLS関数を使用したHLS色空間クラスです。 std::clampを使っているので動作環境をC++20としていますが、適当に書き換えればC++17以前にも対応で…
Win32 APIでウィンドウを表示して、CreateDIBSection関数で作成したビットマップを描画するサンプルコードです。 CreateDIBSection関数で作成したビットマップはppvBits引数に与えた変数の内容をビットマップデータとして直接操作できます。ここでは赤と黒の…
Win32 APIでウィンドウを表示するよくあるサンプルコードです。ウィンドウのクライアント領域に青い正方形を描画します。 #include <memory> #define STRICT #define NOMINMAX #include <Windows.h> static const auto MainWindowClassName = L"MainWindow"; static const auto </windows.h></memory>…
Microsoft ExcelやLibreOffice Calcで使用されるxlsxファイルの名前付き範囲(Excelではテーブル含む)はopenxlsxのread.xlsx関数で読み込めます。 ファイル名test.xlsxの名前付き範囲あるいはテーブルTable1は次のコードで読み込めます。結果はデータフレー…
Win32 APIで使われるSTRRET型の出力引数をstd::wstring型で受け取るクラスのコードです。 // out_STRRET_into_wstring.hpp #include <string> // 同じwstringを受け取るインスタンスを同時に使用しないでください。 // 次のようなコードは不適切です。 // // std::ws</string>…
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、System.Memory名前空間のSpanとMemoryの比較です。SpanがIEnumerableに変換できず苦労したことから、現在はMemoryびいきの内容になっています。ReadOnlySpan、ReadOnlyMemoryに関しては適宜読み替えてください。 項目 Span Memory 種類 ref struct s…
公式ドキュメントは確認していませんが、Windows NT系列ではモジュールハンドルHMODULEは実行可能ファイルのメモリマップトファイルアドレスらしいです。なので、GetModuleHandleやLoadLibraryで取得したモジュールハンドルをchar型文字列にキャストすると最…
実行ファイルデータのアドレスはWin32 APIのGetModuleHandle関数やWinMain関数の引数、スタックのアドレスはローカル変数のアドレスとして取得できます。また、関数のアドレスを取得することで関数が実行ファイルデータとして配置されることが推測できます。…