potisanのプログラミングメモ

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

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

C++&Win API _bstr_tとwil::make_bstr

Windows環境でLPWSTRからスマートポインタ的なBSTRを作成する方法には次の2通りあります。 _bstr_t(...) <comutil.h> wil::make_bstr(...) "wil/com.h" 前者の_bstr_t(...)はコンパイラ付属なので追加インストールが不要ですが、ムーブセマンティクス非対応で独自の参照</comutil.h>…

Googleのログアウト時の広告用検索アクティビティ記録

Googleはログアウト状態だと履歴の記録を止めると思い込んでいましたが、Google検索の「検索でのデータ」と「広告設定」の管理画面を見る限り記録していたようです。 Google 検索でのデータ 日本語版ではGoogle検索トップページ右下の設定をクリック→検索に…

Python 3.11でパッケージのグローバル変数やインポートを隠す

パッケージで使いまわしたいグローバル変数やインポートは__init__.pyと別ファイルの組み合わせで隠せます(見えにくくできます)。具体的には次の手順です。 パッケージ名のディレクトリと__init__.pyを作成する。 グローバル変数やインポートを使いたいス…

C#11 配列の入ったobject型をstring.Joinで結合する

C#

配列の入ったobject型をstring.Join()で結合するにはIEnumerableにキャストしてからOfType<T>()を使います。キャストせず渡すと可変長引数の最初の引数として素直にToString()されます。ちなみにIEnumerableへキャストすると文字列(char[]配列)も分割されるの</t>…

C#&MSVS 17.5.0 Preview 3.0 ユーザーコントロールのobject、nint、nuint型プロパティはプロパティウィンドウで読み取り専用

C#

ユーザーコントロールのobject、nint、nuint型プロパティはプロパティウィンドウで読み取り専用になります。 // UserControl1.Designer.csとUserControl1.resxは既定値なので省略します。 namespace UserControlTest1; public partial class UserControl1 : …

C++&Visual Studio 便利なデバッグ変数情報の視覚化(natvis)と関数使用時の注意

Visual Studio 2022はC++でユーザー定義のデバッグ変数ウィンドウ視覚化に対応しています(natvis)。この機能でクラスのメンバー関数を使おうとしたらいきなり適用されなくなり戸惑ったので現象と解決策を共有します。 natvisの紹介 次の2つのファイルmain.…

C# クラスに属性でIIDを持たせる

C#

C#ではカスタム属性でクラス自体にIIDを持たせられます。ただし静的メンバーより動作は遅く、Guidのような非標準型は属性定義時の引数に渡せないようです。 using System.Reflection; Console.WriteLine(IIDAttribute.Of<ClassWithIPersistIID>()?.ToString("B") ?? "(未定義)"); C</classwithipersistiid>…

C# HRESULTパターン、例外パターン、Nullableパターンのどれを使うかで悩む

C#

C#で自分用のクラスライブラリを作るとき、最中にもエラー対処パターンで悩みます。COM開発で使えるデザインパターンはおそらくHRESULTパターン、例外パターン、Nullableパターン(適当に名付けました)なのですが、一長一短です。 HRESULTパターン エラーを…

C# ジェネリック関数でEnum型を整数へ変換する

C#

ジェネリック関数ではenum型は通常の方法((int)...)で整数へ変換できません。 Convert.ToInt32やConvert.ToUInt32等を使えばジェネリック関数でもenum型を整数へ変換できます。 using System; Console.WriteLine(f(Enum1.A)); string f<T>(T t) where T : Enu</t>…