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

CSIDLではなく KNOWNFOLDERIDをつかう。GetSpecialFolderPathではなくGetKnownFolderPathをつかう

久しぶりにWindows規定のフォルダーを調べる必要があって、CSIDLの何だっけと調べてみた。MicrosoftのCSIDLに関するページをみると、最初に以下のように書かれている。 注意 Vista Windows、これらの値は KNOWNFOLDERID 値に置き換えられています。 新しい定…

enumを基に変換関数を内蔵したオブジェクトをつくる

enumで定義されたデータをシリアライズするときは、何らかの数値(あるいは文字列)と相互変換する。 相手がintでC言語であれば、単純にキャストで相互変換もできる。C++であればstatic_castを使うこともあるだろう。 enum en { e1, e2, e3 }; en e = e3; int …

オブジェクト毎に内部インターフェースをカスタマイズする方法

複数のオブジェクトクラスに対して、同じ動作をさせるクラスの設計をすることがある。 例えば、ファイルへのIO処理はいろいろなオブジェクトを文字列かバイナリに相互変換させるクラスあるいは関数を設計する。 毎度個別に記述するのも良いが、もう少し簡便…

拡張メタファイルの描画精度

Windows上でベクター画像を取り扱うプログラムを作成する場合、サイズを変更しても劣化のないメタファイル・拡張メタファイル形式は一定のメリットがある。 特にクリップボード経由の場合は便利なことが多い。 一方、メタファイルを用いる場合、ビットマップ…

C++ Builderの出力mapのアドレスは相対アドレス

タイトルの通り、C++Builderで出力されるmap中のアドレスは相対アドレスになる。 このため、実行時のアクセス違反メッセージで表示されるアドレス値とは異なることに注意。ベースアドレスは最初に記述されている。例えば以下の通り。 Start Length Name Clas…

C++ Builderの出力mapを自動コピーして保存する

C++ Builderもリンク時にmapファイルを出力できる。 release版でアドレス違反が発生したときのメッセージをもとに、mapファイルで発生元の関数を推測できる。ただし、そのためには準備がいる。 mapの出力設定はオプションのリンカ→出力→マップファイルの種類…