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);
}
};