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

时间:2017-03-17 08:52:28

标签: vba 64-bit vsto

我需要获取Excel 2016 64bit的句柄。

Application.HwndPtr会返回一个长号,而且没有Application.HInstancePtr

可靠吗?

如果可靠,为什么Microsoft会在64位平台上添加Application.HInstance而不是使用旧版{{1}}?

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

1 个答案:

答案 0 :(得分:3)

没关系,操作系统确保窗口句柄永远不会溢出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..

请注意进程外调用(32位值)的long

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