Development

Typesafe Enum イディオム

enum を使って定数を定義する場合に,それらの値を使うときは「型名::値」と言う形で記述したいなぁとよく思うのですが,普通の記述 (enum 型名 { ... };) だとこの要求を満たせません.それで,これまで enum を使うときは enum の型名にあたる部分を名前空…

Hello, Haru Free PDF Library!

C++ での PDF ライブラリだと Haru Free PDF Library の評判が良いようなので,このライブラリの使い方を少しずつメモっていこうと思います.取り合えず,最も基本的なところ(PDF ドキュメント作成からファイルへの保存まで)とテキスト処理まで. 基本形 H…

シェルによるファイルコピー

シェルによるファイルコピーで嵌ったのでメモ.Win32 API でファイルのコピーを行う方法として,CopyFile() の他にシェルを利用すると言うものがあります.今回 CopyFile() を使用せずにシェルの機能を利用した理由は,「コピーに長い時間を要する際にプログ…

コントロールのサブクラス化

しばらくブログはお休みモード.今,TreeView を持つアプリを書いているのですが,TreeView のアイテムの名前を変更しようとしたときに,Enter キーを押すと OK ボタンにフォーカスを奪われてしまい意図した動きにならない(「名前の変更」の終了ではなく,…

GUID を引数に取る Win32 API の宣言と使用方法

GUID 限定と言う訳ではないのですが.例えば,PowerEnumerate と言う関数は C では以下のような宣言になっています. DWORD WINAPI PowerEnumerate( __in_opt HKEY RootPowerKey, __in_opt const GUID *SchemeGuid, __in_opt const GUID *SubGroupOfPowerSet…

Win32 API の .NetFramework での宣言一覧

C# からでも Win32 API を使う事がたびたびあるのですが,そのときに困るのが「どう宣言すればいいんだろう」と言うものでした.そこでいろいろとググっていたのですが,pinvoke.net と言うサイトが Win32 API の .NetFramework での宣言をかなり網羅してい…

Visual C++ での開発でよくやらかす事

/MD を /MT に変更するのを忘れたまま相手に渡して「Microsoft Visual C++ 20XX 再頒布可能パッケージ がありません」と言うエラーを発生させてしまう事.開発環境では Visual C++ がインストールされているので,Visual C++ がインストールされていない環境…

UAC の動的な権限昇格に関するメモ

Windows Vista 以降,User Account Control (UAC) と言う機能が導入されましたが,これによって,注意しておかないと一部の処理が失敗すると言う事例が発生するようになりました.例えば,レジストリの操作に関しては,HKEY_LOCAL_MACHINE や HKEY_CLASSES_R…

デファクトスタンダードとなっている IDE の有無

TL 眺めていて命名について思ったコトなど。 - 偏見プログラマの語り! 辺りに関連して.名前関連(名前が長すぎる)が最も多いような気がしますが,それ以外でも,Java に対する批判への反論として最もよく見かけるものに下記のようなものがあります. だっ…

Boost.勉強会#5 名古屋の雑感

Boost.勉強会#5 名古屋に行ってきました.Boost.勉強会が「Boost があるかもしれない勉強会になりつつある」と言う噂もちらほら聞きましたが,非常に濃い内容で楽しかったです.発表された方,関係者の方々いつもお疲れ様です.以下,印象に残ったものをメモ…

Tumblr 共有ボタン

Tumblr 共有ボタン が公開されていましたので,取り合えず,基本的なリンク用の Tumblr 共有ボタンを設置するコードを以前作成した Social Media Buttons に追加しました.挙動を変えるオプションを導入するかどうかは検討中. サンプル <script type="text/javascript">

Inno Setup で透過処理

厳密には,透過と言う訳ではないですが.Inno Setup の TBitmapImage クラスには ReplaceColor と言うメンバ変数が定義されてあり,ここに指定した値が ReplaceWithColor で指定した値に変換されるようです.なので,透過(っぽい)処理を行うためには,透過…

Desktop と DesktopDirectory

System.Environment.SpecialFolder 列挙体には Desktop と DesktopDirectory と言う 2 つの値が定義されています. メンバ名 説明 Desktop 物理的なファイル システム上の場所ではない論理的なデスクトップ。 DesktopDirectory デスクトップ上のファイル オ…

64bit 版のインストーラから 32bit 用レジストリ値を取得する

Inno Setup の 64bit 版用のインストーラから 32bit プログラム用のレジストリを見る必要があってどうやるのかなぁと探していたら,公式ドキュメントの最初に記述されていました. The root key. This must be one of the following values: HKCR (HKEY_CLAS…

MAX_PATH を超えた場合の挙動

Win32 API (のファイル操作系)を叩く際に気になるものとして MAX_PATH の存在があります.例えば,MoveFile などの関数においても指定されたパスの長さが MAX_PATH (256 文字?) を超えると失敗します.ただ,この制限はパスの頭に "\\?\" と言う文字列を…

一つのソースファイルを複数のプロジェクトで共有する

Visual C# で開発していて,あるソースファイルを複数プロジェクトで共有したいと言うケースが出てきました.ただ,単にプロジェクトの「追加」→「既存の項目」から共有したいファイルを選択すると選択元のソースファイルのコピーができてしまうので,選択元…

32bit プロセスは 64bit プロセスを見つけられない

所用で「あるプロセスから別のプロセスを終了させるプログラム」を書いていました.終了させる部分の関数は以下のような感じ. #include <string> #include <vector> #include <windows.h> #include <tchar.h> #include <psapi.h> #pragma comment(lib, "psapi.lib") namespace process { std::size_t kill</psapi.h></tchar.h></windows.h></vector></string>…

Inno Setup でもインクルードガードが有効だった

何らかのアプリケーションのインストーラーを作成する際には Inno Setup と言うソフトウェアを利用しているのですが,ここの Pascal スクリプト部分([Code] セクション)を再利用したいと思う事が多々あります.Inno Setup の Pascal スクリプトは(オプシ…

達人プログラマーを目指して

ここ最近,自分の観測圏内でしばしば見られるようになった 達人プログラマーを目指して と言うブログが興味深くて,よく読ませてもらっています. 日本のSI業界こそ、専門の技術者の必要性がもっと見直されるべきではないのか? やはり、私は今後もSI業界で…

Windows 開発環境にインストールするフリーソフト

Windows の開発環境にインストールするソフトウェアについて纏めてみました.想定としては,メイン開発が C++, C# によるデスクトップアプリの開発で,サブとして Web 関係の事をちょっと遊ぶのような場合の環境です. 前書き まず,私自身は何故かたくさん…

ディレクトリ内に存在するファイル数の取得方法の比較

あるディレクトリ内のファイル(+ディレクトリ)数を取得する必要があったのですが,Boost.Filesystem と FindFirstFile とでどの程度の速度差になるのかなと思い調べてみました.まず,Boost.Filesystem 版のファイル数カウント関数. #include <string> #include <boost/filesystem.hpp> </boost/filesystem.hpp></string>…

Boost.Asio リンク集

id:faith_and_brave さんが最近 Boost.Asio 関連の記事をたくさん投稿してて,どこかにメモっておきたかったのでここにメモ.それ以外のサイトの記事も見つけたら,ここに一緒に追加していこうと思います. 公式 Boost.Asio - Boost C++ Libraries Examples …

Visutal Studio で Boost C++ Libraries をビルドする

Visutal Studio で Boost C++ Libraries をビルドする必要が出てきたのですが,いくつか嵌った事があったのでメモ.まず,以下のサイトで Windows のバイナリが配布されているようです.バージョンは,3/23 現在で 1.44.0 とやや古い(最新バージョンは 1.46…

継承とテンプレート

この記事は,C++プログラマであるかを見分ける10の質問 - Life like a clown の「抽象クラスとテンプレートクラスの使い分けについてインターフェースと言う観点から述べよ」に対する回答的な記事です.インターフェース的な基底クラスは,テンプレートで代…

コンストラクタ,デストラクタでの例外処理

この記事は,C++プログラマであるかを見分ける10の質問 - Life like a clown の「コンストラクタ,デストラクタにおける例外処理についての戦略を述べよ」に対する回答的な記事になります.例外処理は通常においてもなかなか難しい処理の一つですが,コンス…

virtual デストラクタ

この記事は,C++プログラマであるかを見分ける10の質問 - Life like a clown の「virtual デストラクタの概要および使用上の戦略について述べよ」に対する回答的な記事です.virtual デストラクタの役割は,派生クラスのデストラクタも適切に実行されるよう…

コピーコンストラクタの扱い

この記事は,C++プログラマであるかを見分ける10の質問 - Life like a clown の「コピーコンストラクタおよび代入演算子の扱いにおける戦略について述べよ」に対する回答的な記事です.C++ では,ユーザが明示的にコピーコンストラクタ,および代入演算子を…

ポインタの使用

この記事は,C++プログラマであるかを見分ける10の質問 - Life like a clown の「ポインタの使用方法について,メモリーリーク問題等と絡めながら戦略を述べよ」に対する回答的な記事です.ポインタの使用に関する戦略ですが,経験上は以下の 2点辺りになる…

多重継承の概要

これは,C++プログラマであるかを見分ける10の質問 - Life like a clown の 「多重継承について概要を説明せよ」と言う質問に対する回答的な記事です.多重継承とは,その名の通り,以下のように 2 つ以上のクラスを継承する事を指します. class Base1 { pu…

const 概要

これは,C++プログラマであるかを見分ける10の質問 - Life like a clown の「const の機能について概要を説明せよ」と言う質問に対する回答的な記事です.こんな時ですが,できるだけ平常更新を続けます.C++ の const には大きく分けて 2つの役割があります…