potisanのプログラミングメモ

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

C# ファイナライザは基本的に呼び出されない

C#

C++の感覚でC#のファイナライザもプログラム終了時に呼び出されると思い込んでいたのですが、ファイナライザは基本的に呼び出されません。呼び出されるのはGCの実行時に対象となった場合のみです。Windowsのプロセス終了時に関連リソースを解放する設計によ…

雑記 はてなブログ無料版でもはてなブログタグ無効化可能

はてなブログタグは無料版で強制適用でしたが、2023年7月31日辺りから無効化可能になっていたようです。既定では有効なのでブログごとにアプリ外の詳細設定から無効化する必要があります。また有効化時に投稿された記事は適用されたままなので、個別に更新し…

C# プラットフォーム呼び出しはローカル関数として書ける

C#

ネット投稿を読んで知ったのですが、最近のC#ではプラットフォーム呼び出し (P/Invoke)をローカル関数として書けます。ローカル関数のドキュメントには確かにexternの記載があります。通常のローカル関数を書ける部分なら書けるので、メソッド、プロパティ、…

C# シェルの「shell:~」形式からパスを取得する2

過去の投稿では関数を小分けにしていましたが、一つの機能としてまとめる関数を作成しても良いと思います。ついでに投稿後に追加されたトップレベルステートメントも使用しています。 using System.Runtime.InteropServices; Console.WriteLine(ShellIDListU…

C#&.NET 8.0 WinFormsプロジェクトの依存フレームワークにMicrosoft.Windows.SDK.NET.Refが追加された。

以下の手順でWinFormsプロジェクトの依存フレームワークにMicrosoft.Windows.SDK.NET.Refが追加されて、ビルド後のファイルにWinRT.Runtime.dll (391 KB)とMicrosoft.Windows.SDK.NET.dll (200,076 KB)が追加されました。DLLは両方削除してもおそらく対応す…

C# Parallel.For/ForEachとConcurrentBagによる同期化

C#

C#における同期処理の知識がBackgroundWorkerやTaskで止まっていたのですが、ParallelとConcurrentBagを使ったら非同期処理を簡単に同期処理に変更できました。マルチスレッドになるのでリソースの同時アクセスには注意が必要ですが、各スレッドでそれぞれフ…

C++23 Preview&Win API&WIL WICコンポーネントの情報を取得する

C++と標準ライブラリで以前投稿したコードのC++23 PreviewとWILを使った書き直しです。ifのネストが消えたのはWILのおかげなので、C++20でもWIL、可能ならstd::functionalを使えば同程度に簡単にできると思います。 #include <format> #include <string> #include <iostream> #include <experimental/generator></experimental/generator></iostream></string></format>…

C++&Win API WICを使った画像ファイルからDIBセクションの作成

WIC(Windowsイメージングコンポーネント)を使って画像ファイルからDIBセクションを作成する方法です。WICはGDIでは扱いにくいアイコンやGIF、PNGを統一された方法でビットマップに変換できます。 以下のコードはC++20で動作するウィンドウアプリケーション…

R readr 2.1.5 readme 和訳・改変

Rのパッケージreadr 2.1.5のリファレンス和訳です。readrはHadley Wickham氏の作成したtidyverseの一部で、CSV等の長方形データセットを読み込む機能を提供します。 原文はMITライセンスですが、原文の権利はHadley Wickham氏と貢献者方にあります。翻訳文の…

C++&Win API NtQuerySystemInformation関数とSystemExtendedHandleInformation (0x40)でカーネルオブジェクトハンドルの一覧取得

公開された非公開関数NtQuerySystemInformationと非公開の定数SystemExtendedHandleInformation (0x40)を使うとカーネルオブジェクトハンドルの一覧を取得できます。固定長構造体のみなので前回投稿と比べれば遥かに扱いが楽です。なお、NtQuerySystemInform…

C++&Win API NtQueryObject関数とObjectTypesInformation (3)でカーネルオブジェクトの型名を列挙

NtQueryObject関数とObjectTypesInformation (3)で詰まったのでその概要と動作するコードを記録します。 詰まった点と解決策 NtQueryObject関数とObjectTypesInformation (3)を使うとPUBLIC_OBJECT_TYPE_INFORMATIONの個数とその配列を取得できます(以下、P…

WIL GitHub Wiki シャットダウン認識オブジェクトの和訳・改変

MicrosoftがGitHubでMITライセンス公開しているWILのGitHub Wikiの記事を和訳・改変したものです。素人による翻訳なので、誤訳や著作権上の問題などありましたらご連絡いただけますと幸いです。 シャットダウン認識オブジェクト(原題:Shutdown aware objec…

WIL GitHub Wiki ミューテックスハンドルの和訳・改変

MicrosoftがGitHubでMITライセンス公開しているWILのGitHub Wikiからミューテックスハンドルの記事を和訳・改変したものです。素人による翻訳なので、誤訳や著作権上の問題などありましたらご連絡いただけますと幸いです。 ミューテックスハンドル(原題:Mu…

tidyverse関係の和訳記事

Posit SoftwareのHadley Wickham氏が提供する素晴らしいRパッケージ群tidyverseや関連パッケージの和訳記事へのリンク記事です。徐々に数を増やしていけたらうれしいです。 purrr 1.0.2 リファレンス(途中) purrr 1.0.2 記事「purrr <-> base R」 readr 2.…

R purrr 1.0.2 リファレンス 和訳・改変(途中)

Rのパッケージpurrr 1.0.2のリファレンス和訳です。purrrはHadley Wickham氏の作成した関数型プログラミングの素晴らしいパッケージで、base Rよりも一貫した方法、手軽な方法でデータを操作できます。 現状ではas_mapperまで翻訳できています。 添付文書の…

WIL GitHub Wiki ファイルシステムヘルパーの和訳・改変

MicrosoftがGitHubでMITライセンス公開しているWILのGitHub Wikiの記事を和訳・改変したものです。素人による翻訳なので、誤訳や著作権上の問題などありましたらご連絡いただけますと幸いです。 ファイルシステムヘルパー(原題:File System Helpers (files…

WIL GitHub Wiki ロックガードオブジェクトの和訳・改変

MicrosoftがGitHubでMITライセンス公開しているWILのGitHub Wikiの記事を和訳・改変したものです。素人による翻訳なので、誤訳や著作権上の問題などありましたらご連絡いただけますと幸いです。 ロックガードオブジェクト(原題:Lock guard object) Raymon…

WIL GitHub Wiki カーネルオブジェクトの待機の和訳・改変

MicrosoftがGitHubでMITライセンス公開しているWILのGitHub Wikiの記事を和訳・改変したものです。素人による翻訳なので、誤訳や著作権上の問題などありましたらご連絡いただけますと幸いです。 カーネルオブジェクトの待機(原題:Waiting on kernel object…

C# ReSharper 2024.2.3はVisual Studioのコード分析+少々αだと感じた。

C#

浮動小数点計算やPEファイルの解析クラスを高速化しようとしてReSharperを導入してみました。 Trial版を30分ほど使った感想は以下の通りです。使用期間は30日ですが、既にアンインストールしたので項目は増えません。 WinFormsやWindows依存クラスライブラリ…

R purrr 1.0.2 記事「purrr <-> base R」の和訳・改変

Rのパッケージpurrr 1.0.2の添付文書和訳です。purrrはHadley Wickham氏の作成した関数型プログラミングの素晴らしいパッケージで、base Rよりも一貫した方法、手軽な方法でデータを操作できます。 この文書はpurrr 1.0.2のbase.Rmdの和訳及び改変です。 添…

C#&Windows ディレクトリの循環シンボリックリンクによるIOException

ディレクトリ中のファイルを列挙するプログラムで列挙後のコードが実行されずに悩んでいたのですが、原因は検索ディレクトリ以下に含まれる循環したディレクトリのシンボリックリンクとtry構文による例外の握りつぶしでした。 ディレクトリに循環したシンボ…

C# ビットフィールドは整数か構造体かクラスか

C#

C++では容量削減のためにビットフィールドが多用されました。これをC#でどのように表すべきか、答えのない問題に悩んでいます。 背景:C++のビットフィールド C++のビットフィールドは以下の形式で表されます。組み込み整数のビット演算の糖衣構文です。 // …

R conflicted 1.2.0添付文書の和訳・改変

Rのパッケージconflicted 1.2.0の添付文書和訳です。conflictedはHadley Wickham氏の作成した衝突回避の素晴らしいパッケージで、衝突の検出だけでなく優先順位指定も可能です。 添付文書のライセンスはMITライセンスですが、原文の権利はHadley Wickham氏と…

C# ImmutableArrayは配列のムーブで作成可能

C#

ImmutableCollectionsMarshal.AsImmutableArray<T>静的メソッドを使えば配列をラップするImmutableArray<T>を直接作成できます。配列のToImmutableArrayによる要素コピーを回避できます。C++のムーブに該当します。 なお、ImmutableCollectionsMarshalにはAsImmuta</t></t>…

JavaScript 文字列からShift-JISコード配列を取得するクラス

QiitaでTextDecoderを使ってShift-JISコードを取得する記事(McbeEringi氏)を見かけました。記事中のコードは理解できていないのですが、発想を参考にShift-JISコード配列を取得するクラスを作成しました。 // UnicodeコードポイントからShift-JISへの変換…

PowerShell 7 フォントディレクトリに含まれるファイルの拡張子一覧

フォントディレクトリはエクスプローラーでは特殊フォルダ(フォントフォルダ)扱いされて元のファイル名を表示できません。この仕様はシェルを介さないWindows APIにより回避できます。 PowerShell 7でのスクリプトは以下のようになります。スクリプトでは…

Windows エクスプローラーの検索ボックスを便利に使う(Windows Search 3x)

エクスプローラーの検索ボックスで使える検索方法集です。詳細は末尾の公式ドキュメントを参照してください。Windowsのバージョンによっては内容が変わる可能性があります。 パターン指定 目的 記法 例 完全一致 ="キーワード" System.FileName:="テキスト.t…

C# COMオブジェクトのメソッドをデリゲート経由で呼び出す。

8/30追記 下記のthiscall呼び出し規約を指定したコードはx64で動作しますが誤りです。COMメソッドはSTDMETHODやSTDMETHOD_マクロによりstdcall呼び出し規約が指定されます。x86ではECXレジスタ上のthisが無視されてエラーになるはずです。 WindowsのCOMオブ…

Visual Studio 2022 C#のクラスライブラリをローカルリポジトリで再利用する

クラスライブラリは作っても場所を忘れて使わなくなってしまうことがありますが、ローカルリポジトリを作ってまとめておけば忘れにくくなり、管理も楽になります。 Visual Studio 2022でのローカルリポジトリへのクラスライブラリ登録は次の手順で可能です。…

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

過去の投稿のコードをC# 12 (.NET 8)版に書き換えたものです。nintやオブジェクト初期化子により少し簡潔になります。 非unsafe版 unsafe版 非unsafe版 using System.ComponentModel; using System.Runtime.InteropServices; [assembly: DefaultDllImportSea…