C++

ウインドウスタイルを変更する

MFCアプリケーションのウインドウ属性を変更するには、PreCreateWindow関数でCREATESTRUCT構造体のstyle属性を設定する。 BOOL CMainFrame::PreCreateWindow(CREATESTRUCT& cs) { if( !CFrameWnd::PreCreateWindow(cs) ) { return FALSE; } // 最大化ボタン…

仮想デストラクタ

C++

派生クラスを作成した場合、コンストラクタは基底クラス→派生クラスの順に呼ばれる。 一方デストラクタは、派生クラス→基底クラスの順に呼ばれる。非仮想関数では、基底であっても派生であっても、インスタンスの型を見てどちらのクラスの関数を呼び出すかを…

メモリリーク対応

C++

_CrtSetBreakAllocを用いると、指定したメモリ割り当て位置にブレークポイントを設定できる。 下記のようなログが出た場合、strcore.cpp(156)を呼び出している個所を特定する際に用いる。 ただし、毎回固定位置にメモリ割り当てされる場合にしか使えない。 D…

エラー「ヒープが壊れていることが原因として考えられます。」

C++

mallocで確保した領域を初期化せずにstrcatしていたため、確保した領域内のゴミの後ろに文字列が連結されていた。今まではmalloc後にstrcpyしていたが、そこをコメントアウトしたことで発生していた。 回避するには、mallocした後はstrcatではなくstrcpyする…

整数を文字列に変換する

C++

整数を文字列に変換するには、stringstreamを用いる。 16進数で文字列に変換するには、マニピュレータstd::hexを用いる。 #include std::stringstream ss;// マニピュレータを用いて16進数に変換 ss

アプリの二重起動防止

ミューテックスに識別名(アプリ名)をつけて作成し、そのミューテックスを取得できる場合のみアプリを起動する。他のスレッドが実行中であればWaitOneメソッドは待ち状態となる。 タイムアウトを0にしているので、即座にfalseが返る。■C# // アプリケーショ…