在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位值。等于模块内存中的基址,所以他们被迫添加这个属性。
还有一些帮助功能列在[这里](https://www.viva64.com/en/k/0005/)可用于转换句柄。 –