VisualC++メモランダム2004/03/25
デフォルト引数と派生についてデフォルト引数が使えるのは、呼び出した時のクラスで宣言されている場合です。
例)
派生先のクラスで呼び出す ○ class CTestParent { public: virtual void test(int i) = 0; }; class CTestChild : public CTestParent { public: virtual void test(int i = 0); }; CTestChild objTest; objTest.test();× class CTestParent { public: virtual void test(int i = 0) = 0; }; class CTestChild : public CTestParent { public: virtual void test(int i); }; CTestChild objTest; objTest.test();派生元クラスからポリモーフィックに呼び出す ○ class CTestParent { public: virtual void test(int i= 0) = 0; }; class CTestChild : public CTestParent { public: virtual void test(int i); }; CTestChild objTest; CTestParent* pTest = &objTest; pTest->test();× class CTestParent { public: virtual void test(int i) = 0; }; class CTestChild : public CTestParent { public: virtual void test(int i= 0); }; CTestChild objTest; CTestParent* pTest = &objTest; pTest->test();
2004/03/25
VC6で[ビルド][プロファイル]がディスエイブルになっているレジストリに以下の値を登録すれば使えるようになります。
以下のレジストリ位置にHKEY_CURRENT_USER |-Software |-Microsoft |-DevStudio |-6.0 |-GeneralDWORD値で ProfilerInstalled キーを追加し、値を 1 とする。
詳しくはここを参照
Visual C++ のprofile機能(プロファイラ)を使ってみたい
http://www.cmpt.phys.tohoku.ac.jp/~genya/vcprof.html
2004/03/10
std::stringにnullを代入すると落ちる以下のようなコードは実行時に落ちます。
std::string strTest; strTest = (char*)0;動作として strTest.clear() と同じだと思ってましたが違うようです。
2004/01/28
ウインドウを常に最前面に出しておく方法以下のように指定する。
CWnd* pMainWnd = AfxGetMainWnd(); pMainWnd->SetWindowPos(&wndTopMost, 0, 0, 0, 0, SWP_NOSIZE | SWP_NOMOVE);元に戻す場合
CWnd* pMainWnd = AfxGetMainWnd(); pMainWnd->SetWindowPos(&wndTopNoMost, 0, 0, 0, 0, SWP_NOSIZE | SWP_NOMOVE);
2003/12/18
std::vector<std::vector<int>>がコンパイルを通らない現象の対処方法STLのコレクションにコレクションを入れようとするとコンパイルが通りません。
たとえばこんなんだと、
std::vector<std::vector<int>> ivecvec; // ぶぶー ivecvec.resize(10); ivecvec[0].resize(10); ivecvec[0][0] = 10;最初の行でいきなりコンパイルエラーです。
で、対処方法は、中に入るコレクションに別名をつけることで解決できます。
こんな風に
typedef std::vector<int> ivec; // ここで別名をつける std::vector<ivec> ivecvec2; // 別名で要素を指定 ivecvec2.resize(10); ivecvec2[0].resize(10); ivecvec2[0][0] = 10;(追加:2004/01/28)
別の方法が見つかりました。
以下の方法でも解決できます。
std::vector<std::vector<int> > ivecvec; // OK! ivecvec.resize(10); ivecvec[0].resize(10); ivecvec[0][0] = 10;エラーになる原因は、">>"が演算子として認識されてしまうからのようです。
明示的にスペースで区切ってやれば正しく認識されます。
2003/10/17
クリップボードに文字列形式のデータが入っているかどうか確認する方法IsClipboardFormatAvailable(CF_TEXT) を使う
2003/10/14
ウインドウの最小サイズ最大サイズを制限する方法メッセージハンドラに ON_WM_GETMINMAXINFO() をとうろくし、OnGetMinMaxInfo( MINMAXINFO FAR* lpMMI ) を実装する。
中の処理は以下のようにすればよい。
// 最小ウインドウサイズを設定 lpMMI->ptMinTrackSize.x = 500; lpMMI->ptMinTrackSize.y = 400; // 最大ウインドウサイズを設定 lpMMI->ptMaxTrackSize.x = 1024; lpMMI->ptMaxTrackSize.y = 768; // 設定してから基底クラスのメソッドを呼び出す CDialog::OnGetMinMaxInfo(lpMMI);
2003/09/04
アプリケーション起動時に新規ドキュメントを開かない方法CWinApp::InitInstance()内でProcessShellCommand()する前にcmdInfo.m_nShellCommandをCCommandLineInfo::FileNothingに入れ替えればよい
新規ドキュメント作成時のデフォルトのドキュメントタイトルを変える方法OnNewDocument()でCDocument::OnNewDocument()後にSetTitle()で設定すればよい
2002/10/25
全角文字の判定方法全角文字(2バイト文字)は、_ismbblead(), _ismbbtrail() で調べます。
ほかにもいろいろあり、_ismbb系ルーチンとしてMSDNにまとめられてあります。
2002/03/06
VC++で拡張されているSTL(functional)VC++では独自にSTLが拡張され便利なテンプレートが増えています。その中でも関数をオブジェクトとして扱うのに便利なものが<functional>として用意されています。
特に mem_fun_ref は強力。メンバメソッドを関数オブジェクトとして使えるようにします。 詳細はもっと勉強してからまとめます。今のところ詳しくはMSDNを見て下さい。
2001/10/23
クラッシュダンプの利用方法VC++で作ったプログラムがクラッシュしたときにクラッシュダンプを吐かせてデバッグできるようにする方法
以下の手順で準備する。
デバッグをする手順は、
- レジストリにエントリを追加
HKEY_CURRENT_USER\Software\Microsoft\DevStudio\6.0\Debug に "値"もしくは"DWORD"で、 CrashDumpEnabled という名前を設定、値に1を記述する。- Drwtsn32.exe (ドクターワトソン)を起動し、クラッシュダンプの出力先を指定する。
クラッシュするEXEファイルがあるフォルダを指定すると便利- 標準のデバッガをドクターワトソンに設定する
クラッシュ時に「デバッグ」ボタンを押したときに起動するプログラムをドクターワトソンに設定する
Drwtsn32 -i
元に戻す場合は、VC++の[ツール(T)]→[オプション(O)]→[デバッグ]タブの中の[ジャストインタイムデバッグ(J)]にチェックをすれば標準のデバッガがVC++になる
- プログラムを動かしクラッシュさせる
- VC++を起動し、[ファイル(F)]→[ワークスペースを開く(W)]で拡張子を[*.dmp]に指定してクラッシュダンプファイルを開く
- コールスタックや変数ウインドウも有効なのでデバッグを行う
ただし、クラッシュした時点の状況を再現しただけなのでブレイクポイントを置いたりステップ実行したりはできない
ユーザ定義ワードの設定方法デベロッパースタジオ上で自分の設定したワードに文字をつける方法
usertype.dat というテキストファイルを用意する
色を付けたいワードを1行に1つずつ記述する
Msdev.exe と同じフォルダに格納する(デフォルトなら C:\Program Files\Microsoft Visual Studio\Common\MSDev98\Bin になる)
----/--/--
リンク集