一つ目は、サブクラス化が全く効いていませんでした。単純にSetWindowLongPtrを使うべきところがSetWindowLongのままになっていました。GWL_WNDPROCはGWLP_WNDPROCに書き換えてあったのにメソッドの方を直し忘れるとは…
二つ目は、インデックスのファイル名がおかしくて、x86版などとメールボックスが共用できなくなっていました。
int n = ...; unsigned int u = n; size_t s = u; if (s == -1) { // ... }
のようなコードがあったのですが*1、sizeof(unsigned int)とsizeof(size_t)が同じだと問題ないものの、sizeof(size_t)の方が大きいと、(int)-1 = (unsigned int)0xffffffff = (size_t)0xffffffff != (size_t)-1ということでおかしくなっていました。
同じようなバグが他にもありそうな予感が…
*1 実際には全部別の関数内にあります