2006-06-01 [長年日記]

[Q3] x64版のバグをいくつか修正

一つ目は、サブクラス化が全く効いていませんでした。単純に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  実際には全部別の関数内にあります

[]