Mar*_*din 21 c c++ windows wow64
MSDN告诉我,在进程间通信(MSDN)中,32位和64位应用程序之间可以共享窗口句柄(HWND ).但是,在Win32中,HWND是32位,而在64位Windows中,它是64位.那么如何共享句柄呢?
我想同样的问题适用于命名对象的句柄,如互斥锁,信号量和文件句柄.
Mar*_*din 18
正如Daniel Rose在上面指出的那样,MSDN文档现在指出:
...截断句柄(将其从64位传递到32位)或对句柄进行符号扩展(将其从32位传递到64位)是安全的.
这里似乎仍有一些混乱,因为我被告知零扩展是WOW64开发的正确方法.如果您正在编写一个64位模块,从32位模块获取句柄,最安全的选择可能是仅比较句柄的低32位(即截断).否则,您可能会遇到符号扩展与零扩展差异.
Mar*_*din 12
我刚收到一封来自Microsoft WOW64开发人员的电子邮件,他确认:
手柄为32位,可以安全截断/零延伸.对于内核对象句柄和USER/GDI句柄都是如此.
Tim*_*ter 9
它们可以共享的事实是否意味着在Win64进程中只使用低32位?Windows句柄是索引而不是指针,至少据我所知,所以除非MS想要允许超过2 ^ 32窗口/文件/互斥/等.处理没有理由void*在Win64上使用高32位.
void*
归档时间:
15 年,9 月 前
查看次数:
8943 次
最近记录:
12 年,4 月 前