thunkコードを修正した。

公開:2012-09-29 20:47
更新:2017-09-22 05:40
カテゴリ:windowラッパーライブラリ,windows,c++

thunkコードを修正した。オフセットが32bitの範囲を超えるとだめらしい。今までは偶然動いていただけみたい。我ながら恐ろしいコードだな。


    // thisとhwndをつなぐthunkクラス
    struct hwnd_this_thunk : public Xbyak::CodeGenerator {
      hwnd_this_thunk(base_win32_window* impl,typename proc_t::proc_type proc)
      {
        // rcxにhwndが格納されているので、それをimpl->hwndに保存
//        mov(ptr[(size_t)&(impl-&gt;hwnd_)],rcx); // <-- エラー発生部分
        mov(rax,(size_t)&impl-&gt;hwnd_);  // <-- 訂正
        mov(ptr[rax],rcx);              // <-- 訂正
        // 代わりにthisのアドレスをrcxに格納
        mov(rcx,(LONG_PTR)impl);
        // r10にproc(Window プロシージャ)へのアドレスを格納
        mov(r10,(LONG_PTR)proc);
        // Window プロシージャへへジャンプ
        jmp(r10);
      }
    };