ドナドナされるプログラマのメモ

Windows用アプリのプログラミングメモ

Visual Studio

Visual studioのC++で実行ファイルのプロパティにビルド番号を埋め込む

Visual studio, 便利なのに、なぜかビルドしたファイルのバージョンプロパティにビルド番号を埋め込めない。そこで、下記にあるIncrementBuildを導入した。 Build Incrementing for Visual Studio C++ Projects – Fooling Around 動作原理 ビルド後のイベン…

Visual Studio2017でWindowsXp用プログラムをビルドする

事情によりWindowsXp用プログラムをビルドすることになったんだけど、WINVER等の定数をいじっても、出来上がったソフトが動かなかった。確か、有効な実行ファイルではありませんとか言われる。なんでかなーと思いながらオプションながめてたら、こんなの発見…

GetLastError()の結果をCStringで出力するクラス

GetLastError()で得たエラーコードを毎回FormatMessageで変換するのが面倒だったので、両者をひとまとめにしてCStringまたはLPCTSTRで返すクラスを作った。 注意! LPCTSTRは一時オブジェクトのアドレスを返すので、長時間使わないこと。すぐに無効なアドレ…

CString等でUnicodeとマルチバイトを相互に変換する

CString等でUnicodeとマルチバイトを相互に変換する方法のメモ。こんな便利なマクロ(実態はクラス)があったとは。例えば、UnicodeからANSI(マルチバイト)に変換する場合はCW2A(string)でOK。逆に、ANSIからUnicodeならCA2W(string)。マクロの返り値が変換…

CImageからcv::Matへの画像コピー

MFCで画像をお手軽に使えるクラスCImageから、画像処理の定番OpenCV用のクラスcv::Matへ画像をコピーするのは、一見簡単だが罠がある。CImageが保持している画像データへのポインタはCImage::GetBits()で取得できるのだが、このポインタ、データの先頭を指す…

Critical error detected c0000374

昔作ったソフトの改造をしていたら、突然「Critical error detected c0000374」というエラーが出て止まるようになった。実行継続して例外を処理させてみたら、 「ハンドルされない例外が 0x00007FFB1E01E6FC (ntdll.dll) で発生しました(伏せ字.exe 内): 0xC…

Visual Studioの出力ウィンドウにデバッグ文字列を出力する(ATLTRACE, AtlTrace, _RPTn)

Visual Studioを使ってWIndowsプログラムのデバッグ中に、プログラムや変数の状態を表示したい・残したいと思う人や、なんでstderrが使えないんじゃああ!という人向けメモ。 C/C++でこれをするには、OutputDebugStringや_RPTNという関数が便利。他にもATLTR…