Я использую static_cast по двум причинам.
Разве тот факт, что они могут использоваться совместно, не означает, что в процессах Win64 используются только младшие 32 бита? Дескрипторы Windows - это индексы, а не указатели, по крайней мере, насколько я могу судить, поэтому, если MS не хочет разрешить более 2 ^ 32 окон / файлов / мьютексов / и т. Д. обрабатывает, нет причин использовать старшие 32 бита void *
в Win64.
Думаю, вы правы, когда в целом проявляете осторожность. Однако утверждение MSDN о том, что ими можно делиться, - это контракт с нами, программистами. Они не могут сказать «поделитесь им сегодня», а потом «больше не» завтра, не взломав большого количества программного обеспечения.
Аналогичным образом, для 64- и 32-битного программного обеспечения, которое должно работать одновременно на данной машине, и чтобы каждый мог получить вместе с тем, HWND (и многие HANDLE) должны по-прежнему быть 32-битными и совместимыми.
Я думаю, что я говорю, что я думаю, что это очень безопасная ставка, по крайней мере, на время существования Windows 7 и, вероятно, Windows » следующий ».
I just received an email from a Microsoft WOW64 developer who confirms:
Handles are 32bit and can be safely truncated/zero extended. It is true for both kernel object handles and USER/GDI handles.