Как я могу совместно использовать HWND между приложениями на 32 и 64 бита в Win x64?

Я использую static_cast по двум причинам.

  1. явно ясно, что происходит. Я не могу перечитать по этому, не понимая, что существует продолжение броска. С бросками C-стиля Вы следите, может передать прямо по нему без паузы.
  2. легко искать каждое место в моем коде, куда я бросаю.
21
задан Georg Fritzsche 30 November 2009 в 21:59
поделиться

3 ответа

Разве тот факт, что они могут использоваться совместно, не означает, что в процессах Win64 используются только младшие 32 бита? Дескрипторы Windows - это индексы, а не указатели, по крайней мере, насколько я могу судить, поэтому, если MS не хочет разрешить более 2 ^ 32 окон / файлов / мьютексов / и т. Д. обрабатывает, нет причин использовать старшие 32 бита void * в Win64.

9
ответ дан 29 November 2019 в 20:32
поделиться

Думаю, вы правы, когда в целом проявляете осторожность. Однако утверждение MSDN о том, что ими можно делиться, - это контракт с нами, программистами. Они не могут сказать «поделитесь им сегодня», а потом «больше не» завтра, не взломав большого количества программного обеспечения.

Аналогичным образом, для 64- и 32-битного программного обеспечения, которое должно работать одновременно на данной машине, и чтобы каждый мог получить вместе с тем, HWND (и многие HANDLE) должны по-прежнему быть 32-битными и совместимыми.

Я думаю, что я говорю, что я думаю, что это очень безопасная ставка, по крайней мере, на время существования Windows 7 и, вероятно, Windows » следующий ».

1
ответ дан 29 November 2019 в 20:32
поделиться

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.

12
ответ дан 29 November 2019 в 20:32
поделиться
Другие вопросы по тегам:

Похожие вопросы: