在32位和64位平台上总是处理32位?

在32位和64位平台上总是处理32位?

问题描述:

我需要获取Excel 2016 64位的句柄。在32位和64位平台上总是处理32位?

Application.Hwnd返回一个很长,并且没有Application.HwndPtr

可靠吗?

如果可靠,为什么微软添加Application.HInstancePtr而不是在64位平台上使用旧的Application.HInstance

窗口句柄是否可能大于32位?

这很好,操作系统确保窗口句柄永远不会溢出32位值。你永远不能在桌面上拥有超过65535个窗口,这样做很容易。这是这样工作的是你可以在COM互操作声明中看到一个远程的窗口句柄,可见在WTypes.idl SDK文件:

typedef union _RemotableHandle switch(long fContext) u 
{ 
    case WDT_INPROC_CALL: long hInproc; 
    case WDT_REMOTE_CALL: long hRemote; 
} RemotableHandle; 

typedef [unique] RemotableHandle * wireHWND; 
typedef [unique] RemotableHandle * wireHMENU; 
// etc.. 

注意它是如何long过程外的一个电话,一个32位的值。

一个HINSTANCE是一个非常不同的句柄,一个内核句柄,它肯定是引擎盖下的64位值。等于模块内存中的基址,所以他们被迫添加这个属性。

+0

还有一些帮助功能列在[这里](https://www.viva64.com/en/k/0005/)可用于转换句柄。 –