potisanのプログラミングメモ

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

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

WIL GitHub Wiki 型検証ヘルパーの和訳・改変

MicrosoftがGitHubでMITライセンス公開しているWILのGitHub Wikiから記事を和訳・改変したものです。素人による翻訳なので、誤訳や著作権上の問題などありましたらご連絡いただけますと幸いです。 型検証ヘルパー(原題:Type validation helpers) Raymond …

WIL GitHub Wiki string_makerの和訳・改変

MicrosoftがGitHubでMITライセンス公開しているWILのGitHub Wikiの記事を和訳・改変したものです。素人による翻訳なので、誤訳や著作権上の問題などありましたらご連絡いただけますと幸いです。 string_maker Raymond Chen、2020/1/24、リビジョン1個 wil::d…

WIL GitHub Wiki テンプレートメタプログラミングヘルパーの和訳・改変

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

WIL GitHub Wiki 引数処理ヘルパーの和訳・改変

MicrosoftがGitHubでMITライセンス公開しているWILのGitHub Wikiから記事を和訳・改変したものです。素人による翻訳なので、誤訳や著作権上の問題などありましたらご連絡いただけますと幸いです。 引数処理ヘルパー(原題:Parameter handling helpers) Ray…

WIL GitHub Wiki 最終エラー(Last error)の保存の和訳・改変

MicrosoftがGitHubでMITライセンス公開しているWILのGitHub Wikiの記事を和訳・改変したものです。素人による翻訳なので、誤訳や著作権上の問題などありましたらご連絡いただけますと幸いです。 最終エラー(Last error)の保存(原題:Last error preservat…

WIL GitHub Wiki Win32ヘルパーの和訳・改変

MicrosoftがGitHubでMITライセンス公開しているWILのGitHub Wikiの記事を和訳・改変したものです。素人による翻訳なので、誤訳や著作権上の問題などありましたらご連絡いただけますと幸いです。 Win32ヘルパー(原題:Win32 helpers) 使い方 文字列長定数 …

C# 匿名型と「is not {...} x」パターンマッチングのサンプルコード

C#

動作確認環境:C# 9.0 「++C++; // 未確認飛行 C」に匿名型とis not {...} x形式パターンマッチングの記事(リンクは記事末尾)がありました。どちらも使ったことがなかったので、自分用のサンプルコードとして。 using System; // 匿名型の作成 var t = new…

C# Win32エラーコードをHRESULTへ変換する関数GetHRForWin32Error

C#

動作確認環境:C# 8.0(.NET Core 3.1)、9.0(.NET 5.0) Win32エラーコードをHRESULTへ変換する関数です。System.Runtime.InteropServices.MarshalクラスはDllImport属性の付いた関数の最終エラー(呼び出し直後のGetLastError関数の結果)からHRESULTへ変…

C# レコードにCreate静的メソッドを持たせる

C#

動作確認環境:C# 9.0(.NET 5) レコードは特殊なクラス(参照型の複合型)であり、クラス同様の静的メソッドを持つことができます。これを利用してインスタンスの作成を試行するCreate静的メソッドを実装できます。クラスの当たり前はレコードでも可能であ…

C# 9.0 複合型に加わったレコード

C#

C#の複合型は構造体とクラスの2種類であり、C# 8までキーワードはclassとstructだけでした。C# 9.0からはここにrecordキーワードが追加されました。recordの実体は特別扱いされるクラスです。 型の分類を表にすると以下のような状態かと思います。レコードは…

C# 9.0 Windows 10の拡張子の分類情報等を取得する

Windows 10で拡張子の分類情報など(Perceived Type等)を取得するにはWin32APIのAssocGetPerceivedType関数を使用します。以下はそのサンプルコードです。recordやnew (...)を使用しているのでC# 9.0以降対応です。 using System; using System.Runtime.Int…

C#言語関係

C#

このブログのC#言語記事のまとめページです。ページ名の前に8、9、8-9がある場合、そのバージョン(C# 8、9、8-9)で動作確認しています。 言語機能 文字列 コレクション・LINQ 実行ファイル プラットフォーム呼び出し(P/Invoke)全般 その他 Windows開発 …

C++言語関係

C++

このブログのC++言語記事のまとめページです。先頭の数字はC++のバージョンを指します(20→C++ 20等)。 言語機能 標準ライブラリ 文字列 コンテナ・スマートポインタ レンジ(Ranges) 標準入出力 整数 その他 Windows開発 標準入出力 デバイスIO COM セッ…

その他言語関係(Windows一般、JavaScript、PowerShell、Python 3)

このブログの記事数の少ない言語のまとめページです。 一般 Windows一般 JavaScript PowerShell Python 3 R Ruby 一般 情報量の単位KBの変遷とkB、KiB Firefox 91.0でDuckDuckGo Privacy Essentialsがはてなブログの記事編集を妨げていた Windows一般 リソー…

C# isによる3種類のパターンマッチング

C#

動作確認環境:C# 9.0(.NET 5.0) isによるパターンマッチングの概要と具体例です。 概要 isパターン 概要 型パターン 式の型キャスト結果を変数に保持してキャスト可否を返却する。 定数パターン 式が定数式を満たすか判定する。 varパターン 式の結果をロ…

C# 9.0 ushortのushort範囲制限加減算

C#

ushort型の加減算のはみ出し switch式による加減算はみ出しの抑制 isのvarパターンによるはみ出し抑制 Math.Clampによる例 ushort型の加減算のはみ出し ushort型はint型として加減算されるため、計算結果がushortの範囲(0-0xffff)をはみ出す場合があります…

C# WinAPIを使ったHLS色構造体

動作確認環境:C# 9.0(.NET 5) WinAPIを使ったHLS色構造体のコードです。Color型およびタプル(Tuple<ushort, ushort, ushort>およびValueTuple<ushort, ushort, ushort>)との相互変換をサポートしています。Colorとは異なりひとつの整数で表すことを前程としないため、IComparableおよびIComparable<T>は実装</t></ushort,></ushort,>…

C# 9.0 P/Invokeで使う構造体の管理方法いくつか

C#ではP/Invokeで使う構造体をいくつかの方法で実装できます。ここでは実用性は別としていくつかの方法を紹介します。ボックス化の回避などは割愛しています。 構造体として扱う 通常の構造体 読み取り専用構造体 絶対サイズ指定の構造体 絶対サイズ指定の読…

C# 9.0 メモリ割り当て文字列のカスタムマーシャラー

はじめに カスタムマーシャラー CoTaskMem→Unicode文字列 HLOCAL→Unicode文字列 FormatMessageWの例 参考 はじめに C#では以下の手順でアンマネージ関数のP/Invoke時にマーシャリングをカスタマイズできます。 ICustomMarshalerインターフェイスを実装したク…

C# 絶対サイズ指定の構造体は全体コピーされる

C#

C# 9.0ではStructLayout属性のSize引数を指定した構造体は通常のコピーでも全部(Sizeバイト分)コピーされます。P/Invoke以外ではメンバー変数のカバー範囲だけコピーされるかと思っていましたが、カバー範囲外もコピーされていました。Win32 APIのVARIANT…

C# プロパティシステムのサンプルコード

C# .NET5.0(.net5.0-windows)でWindowsのプロパティシステムの情報を操作する自分用のサンプルコードを記録しています。 シェルアイテムのプロパティの名前から値(PROPVARIANT)を取得する。 シェルアイテムのプロパティの名前から値(書式化文字列)を取…

WIL GitHub Wiki イベントハンドラの和訳・改変

MicrosoftがGitHubでMITライセンス公開しているWILのGitHub Wikiの記事を和訳・改変したものです。素人による翻訳なので、誤訳や著作権上の問題などありましたらご連絡いただけますと幸いです。 イベントハンドラ(原題:Event handles) Raymond Chen、2020…

C++&WIL ファイルシステムオブジェクトのプロパティ情報を列挙する

C++20とWIL(バージョン)でプロパティシステムを使ってファイルシステムオブジェクトのプロパティ情報を列挙するサンプルコードです。 サンプルコード 出力例 サンプルコード // 動作確認環境: // C++20 // WIL 1.0.201120.3 #include <algorithm> #include <iostream> #include <ranges></ranges></iostream></algorithm>…

C++ WinAPIのPSFormatForDisplayAlloc関数の返す文字列がコンソールで異常な文字(Unicode directional characters)を含む

ファイルシステムオブジェクトのプロパティ値をコンソールへ出力していたら、あるオブジェクトの更新日時(System.DateModified)以降が出力されなくなりました。原因はIPropertySystem::FormatForDisplayAlloc(PSFormatForDisplayAlloc)関数の仕様「フラ…

C++&WIL Windowsプロパティシステムのプロパティ情報を列挙する

C++20とWILでWindowsプロパティシステムのプロパティ情報を列挙するサンプルコードです。コードの変更でプロパティの他の情報も列挙できます。 コード 出力例 コード #include <iostream> #include <string> #pragma comment(lib, "propsys.lib") #define STRICT #include <Windows.h> #in</windows.h></string></iostream>…

C++20 レンジについて調べたこと

C++20のレンジについて調べたことの覚え書きです。 ここで扱うレンジ ここでは<ranges>ヘッダーで定義されるstd::ranges::range<T>コンセプトを満たす型をレンジとして扱います。range<T>の要件は型Tの変数tに対してstd::ranges::begin(t)とstd::ranges::end(t)が定義され</t></t></ranges>…

C++20 Rangesプロジェクションの動作確認用コード

動作確認用に作成したコードのメモです。以下のコードではstd::ranges::range<T>コンセプトを満たす型をレンジあるいはrange<T>として表記することもあります。 プロジェクションとは? range<optional<int>>の各要素の空判定を出力する。 range<optional<int>>の無効値を-1に変換して各要素を</optional<int></optional<int></t></t>…

C++ Function-try-block(関数tryブロック)

関数tryブロック WILでの利用 MSVCのコンストラクタにおける不思議な挙動 参考 関数tryブロック WILのGitHub Wikiを読んでいたら関数名の後ろ、constやnoexceptのある部分にtry、関数の直後にcatchのあるコードを見かけました。main関数で示せば次のような感…

C++17 STL variant、any、optional

C++にはintやdoubleといったC言語と共通の組み込み型(基本型)に加えてSTLの提供する型を使用できます。ここではSTLの提供する型のうち複数の型の値や無効値を一つの型としてまとめて扱う型variant、any、optionalを紹介します。 概要 variant any optional…

WIL GitHub Wiki ビット操作ヘルパーの和訳・改変

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