読者です 読者をやめる 読者になる 読者になる

S.F. Page

Programming,Music,etc...

thunkコードを修正した。

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->hwnd_)],rcx); // <-- エラー発生部分
        mov(rax,(size_t)&impl->hwnd_);  // <-- 訂正
        mov(ptr[rax],rcx);              // <-- 訂正
        // 代わりにthisのアドレスをrcxに格納
        mov(rcx,(LONG_PTR)impl);
        // r10にproc(Window プロシージャ)へのアドレスを格納
        mov(r10,(LONG_PTR)proc);
        // Window プロシージャへへジャンプ
        jmp(r10);
      }
    };