タグ

ブックマーク / y-hamigaki.hatenablog.com (6)

  • [C++]VC++のウォッチ式 - かそくそうち

    他所に書きましたが、こっちにもメモしておきます。 VisualStudioのウォッチ式に「@err,hr」を入れておくと、Windowsのエラーコードがエラーメッセージ付きで見れるので便利です。 Visual Studio: [スレッド] ウィンドウの使用方法 http://msdn.microsoft.com/library/ja/vsdebug/html/_core_Using_the_Threads_Dialog_Box.asp Visual Studio: 書式指定子 (C/C++ 言語式) http://msdn.microsoft.com/library/ja/vsdebug/html/_asug_Format_Specifiers_for_Watch_Variables.asp

    [C++]VC++のウォッチ式 - かそくそうち
    Wacky
    Wacky 2008/04/05
    VisualStudioのウォッチ式に「@err,hr」を入れておくと、Windowsのエラーコードがエラーメッセージ付きで見れるので便利です。
  • VC8のfilebufとsetlocale - かそくそうち

    今日はライブラリの作業を進める気分ではなかったので、前々から気になっていた、VC8のstd::filebufがstd::setlocale()を呼ばないと動かない問題と、std::setlocale()を呼ぶと標準出力/エラー出力がおかしくなる問題について調べてみました。 原因に関してはこんな感じでした。 std::filebufのファイル名がCのロケールに従ってワイド文字に変換される ↓ Cのロケールを変更するためにstd::setlocale()を呼ぶことになる ↓ Cのロケールが"C"以外になると、ファイルポインタへの書き込みで、ワイド文字経由でコンソールのコードページへの変換が発生する ↓ 既定ではstdoutやstderrがバッファリングなしの設定なので、マルチバイト文字のリーディングバイトだけでワイド文字に変換しようとして失敗する ↓ 書き込みに失敗したため、std::file

    VC8のfilebufとsetlocale - かそくそうち
    Wacky
    Wacky 2008/04/05
    移植性を気にしなくてよければstd::filebufのワイド文字列版コンストラクタを使い、CロケールとC++グローバルロケールは変更しないのが簡単です。
  • 2008-01-26 VC++の例外処理の仕組みを追う - かそくそうち

    昨日はg++の例外処理を追ったので、今日はVC++も調べてみました。 適当な例外を送出するコードを逆アセンブルすると、_CxxThrowException()という関数が呼ばれていたので、これをキーワードに調べてみたところ、CRunTinyというプロジェクトがVC++用簡易ランタイムを作成しているのを見つけました。 そして、そこからリンクされているDDJの記事「Visual C++ Exception-Handling Instrumentation」に詳細が書かれていました。 なんで構造体のメンバまで分かるのかと思って読んでみたら、デバッガで見たそうです。 試してみたら確かに見えました。ちゃんとデバッグ情報が残っているんですね。 というわけで、以下が実際に調べた_CxxThrowException()に関する宣言です。 typedef void (__cdecl *_PMFN)(void

    2008-01-26 VC++の例外処理の仕組みを追う - かそくそうち
    Wacky
    Wacky 2008/02/03
    昨日はg++の例外処理を追ったので、今日はVC++も調べてみました。
  • VC++の例外処理の仕組みを追う その2 - かそくそうち

    id:rayfillさんに教えてもらった「How a C++ compiler implements exception handling」を途中まで読んだんですが、実装がg++と随分違うことが分かりました。 例外オブジェクトはスタック上に配置され、スタックの巻き戻し中もスタックに残ったままになる スタックの巻き戻し自体は完了するまでESPを変えないので、巻き戻し中の関数呼び出しは例外を投げた関数のフレームの続きからスタックを使う(つまり、巻き戻し中のスタックが残っていても問題ない) 例外ハンドラのリストもスタック上に構築されるので動的メモリが一切必要ない 例外オブジェクトがスタックに配置されるので、他のスレッドに持っていく場合はコピーせざるを得ませんね。 あと、この方法なら動的メモリが必要ないので、OSカーネル内でも例外処理が利用可能なはずです。 (NT3.51時代の)ヘルプを見る限り、

    VC++の例外処理の仕組みを追う その2 - かそくそうち
    Wacky
    Wacky 2008/02/03
  • Boost Installer - かそくそうち

    メインマシンは引越し運送中のため、古いノートで作業しています。 せっかくなので、Boostのセットアップに先日公開されたBoost Installerを使ってみました。 http://lists.boost.org/Archives/boost/2006/05/105004.php インストーラはNSIS(Nullsoft Scriptable Install System)で作成されていて、コンパイル済みファイルをWebからダウンロードしてきます。 インストールの流れは、 ミラーサイトの選択(jpサイトあり) コンパイラとバリアント(ランタイムライブラリやスレッディングの種類)の選択 コンポーネント(ヘッダ、ドキュメント、Boost.Build、各種ライブラリ)の選択 インストール先の選択(デフォルト=C:\Program Files\boost\boost_1_33_1) といった具合

    Boost Installer - かそくそうち
    Wacky
    Wacky 2006/06/10
    Boostのセットアップに先日公開されたBoost Installerを使ってみました。インストーラはコンパイル済みファイルをWebからダウンロードしてきます。
  • 続cdecl_thunk - かそくそうち

    昨日のcdecl_thunkを使うと、ASIOのコールバック関数は次のようになります。 struct asio_callbacks { cdecl_thunk<2> buffer_switch; cdecl_thunk<2> sample_rate_changed; cdecl_thunk<4> asio_message; cdecl_thunk<3> buffer_switch_time_info; };sample_rate_changedは引数1個なんですが、型がdoubleなので引数2個の扱いです。 サンクのメモリはVirtualProtect()で実行可能にしておく必要があります。VirtualProtect()するには、そのメモリをVirtualAlloc()で確保しておかなければいけません。 VirtualAlloc()はページ単位でメモリを確保するため、サンク毎にメモリを割

    続cdecl_thunk - かそくそうち
    Wacky
    Wacky 2006/05/14
  • 1