potisanのプログラミングメモ

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

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

まとめページ

主要なカテゴリのまとめページへのリンクです。最近は更新をさぼり気味です。 C#言語関係 C++言語関係 WIL (Windows Implementation Libraries)関係 その他言語関係(Windows一般、JavaScript、PowerShell、Python 3)

C++ size_t→DWORDキャスト時の注意(UINT、std::uint32_t、unsigned int等)

C++

STLはsize_t、Win32 APIはDWORD(あるいはUINT)を使う場合が多いです。size_tからDWORDへは暗黙にキャストできますが、範囲外が切り捨てられる可能性があるのでコンパイル警告が発生します。Cスタイルキャスト(DWORD)...やキャスト演算子static_cast<DWORD>(...)に</dword>…

C++20 生のポインタをstd::spanで扱う

std::spanでは生のポインタもSTLコンテナと同様に扱えます1。生ポインタの操作は通常推奨されませんが、WinAPIは連続したメモリ領域に異なる型を複数配置する場合があり、その場合に使用することになります。例えばFILESYSTEM_STATSTICS_EX構造体の直後にEXF…

C++20&WinAPI DeviceIoControl(FSCTL_FILESYSTEM_GET_STATISTICS_EX)のラッパークラス

C++20におけるWinAPIのDeviceIoControl(FSCTL_FILESYSTEM_GET_STATISTICS_EX)のラッパークラスです。ファイルは本体であるDeviceIoControlForFileSystemStatisticsExを定義するDeviceIoControlForFileSystemStatisticsEx.hpp、再利用可能そうなコードを集…

C++20 std::ranges::subrangeのメンバー関数使用例(Microsoft Visual Studio 2019 Community 16.9.0 Preview 3)

Microsoft Visual Studio 2019 Community 16.9.0 Preview 3におけるstd::ranges::subrangeのメンバー関数使用例です。 #include <ranges> #include <vector> int main() { std::vector v{ 0, 1, 2, 3, 4 }; // std::ranges::subrange r{ v }; std::ranges::subrange r(v.cbeg</vector></ranges>…

C++20 std::span、std::basic_string_view、std::ranges::subrangeの使い分け

C++20には所有権を持たず範囲を表すクラスとしてstd::span、std::basic_string_view、std::ranges::subrangeが用意されています。これらの概要は以下の通りです。 クラス 概要 std::span 連続したメモリ領域の部分を参照する。 std::basic_string_view 文字…

C++20 コンセプト関係のメモ

C++20のコンセプト関係のメモです。 std::destructibleはnoexcept(true)なデストラクタを持つクラスを含まない std::constructible_fromコンセプトはnoexcept(true)なデストラクタを持つクラスを含まない ある型が特定の型の引数から構築可能か調べる std::r…

C++17-20 文字列をある文字で分割した文字列ビューのベクターを作成する

C++で文字列をある文字で分割した文字列ビューのベクターを作成するコードです。コンセプトを使用したC++20以降用のコード、std::basic_string_viewを使用したC++17以降用のコードを記載しています。 C++20以降用のコード あまり使う機会はありませんがbasic…

C++/WinRT バッテリーのデバイスセレクター文字列とレポートを取得する

動作確認環境 ソースコード 名前空間の省略、元の型の優先 名前空間の省略、auto型の優先 名前空間の明記、元の型の優先 説明 WinRTの使用に関する事項 WinRTの一般事項 コード特有の事項 MicrosoftのWinRTリファレンス 動作確認環境 Microsoft Visual Studi…

MSVS Community 2019 16.9.0 Preview 3.0でC++/WinRT開発を有効にする

Microsoft Visual Studio Community 2019 16.9.0 Preview 3.0でC++/WinRT開発を有効にしたとき、いくつかの準備が必要でした。具体的にはVisual Studioで次の操作を実行します。順番は自由です。 機能:「ツールと機能を取得」で「ユニバーサル Windows プラ…

C++&STL ワイド文字列の静的配列からstd::vector<std::wstring>を作成する

本文 C++でワイド文字列の静的配列(const wchar_t ...[];)からstd::vector<std::wstring>へ変換するにはstd::vector<std::wstring>のコンストラクタを使用します。引数には静的配列の(変換したい範囲の)最初と最後要素のアドレスを渡します。このコンストラクタはcpprefjpではイテレ</std::wstring></std::wstring>…

17 C++&Win32 API ファイルの多言語対応リソースの言語とファイルパスを取得する

C++とWin32 APIでファイルの多言語対応リソース(Microsoft Docsでは「language-specific resource files」)の言語名とMUIファイルパスを取得するサンプルコードです。 // 動作確認環境:C++ 17 #include <io.h> #include <fcntl.h> #include <array> #include <filesystem> #include <iostream> #includ</iostream></filesystem></array></fcntl.h></io.h>…

Microsoft PowerShell v7.1.1公開

PowerShell 7を起動したら表示されました。以下のリンクから更新内容の確認とダウンロードできます。 github.com

C# imageres.dll.munからProgressRingのリソース(PNGデータ)を読み込む

動作確認環境:C# 9.0 preview C#でimageres.dll.munからProgressRingのリソースのPNGデータを読み込むサンプルコードです。実際には複数のPNGリソースが保管されているため、代表としてリソースID 5021を読み込んでいます。 Win32APIのLockResource関数はリ…

Windows 10のimageres.dllのリソースはimageres.dll.munに移動された

Windows 10のリソースについて調べていると%WINDIR%\System32\imageres.dllがヒットします。以前はこのDLLにいくつかのリソースが保存されていましたが、現在は次の場所に移動されています。 %WINDIR%\SystemResources\imageres.dll.mun .munという拡張子は…

C++&WIL パスを含むドライブがSSD等か確認する

動作確認環境:MSVC、C++20 (preview) Win32 APIのDeviceIoControl関数とIOCTL_STORAGE_QUERY_PROPERTYフラグを使ってパスを含むドライブがSSD等か確認するサンプルコードです。オリジナルのソースコードはMicrosoft BlogのThe Old New ThingでRaymond Chen…

C++ std::arrayとstd::vectorのメモリ確保場所(スタック、ヒープ)とWin32 APIの固定長文字列

C++

Win32 APIの固定長文字列をSTLで扱うとき、バッファーの選択肢にstd::arrayとstd::vectorが挙げられます。 これらは連続したメモリ領域を管理する似たようなSTLコンテナクラスですが、メモリの確保場所が異なります。 それぞれの確保場所とその性質は次表の…

C++ MSVC版new/delete演算子の覚え書き

C++

MSVC(2019 Community Preview)におけるC++のnew/delete演算子の覚え書きです。 目次 いつものnew/delete/new[]/delete[]演算子の実体はグローバルスコープの関数 クラスの演算子オーバーロードによるクラススコープのnew/delete/new[]/delete[]の定義とグ…

C++ do {...} while((void)0, 0)によるマクロラッピング

C++

WIL(Windows Implementation Libraries)のソースコードを読んでいたら次のコードを見つけました。 #define BEEP_IF(condition) do { if (wil::verify_bool(condition)) { Beep(); } } while ((void)0, 0) BEEP_IF(condition)マクロの定義、if ((condition)…