2017-03-17 217 views
1

我需要獲取Excel 2016 64位的句柄。在32位和64位平臺上總是處理32位?

Application.Hwnd返回一個很長,並且沒有Application.HwndPtr

可靠嗎?

如果可靠,爲什麼微軟添加Application.HInstancePtr而不是在64位平臺上使用舊的Application.HInstance

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

回答

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.. 

注意它是如何long過程外的一個電話,一個32位的值。

一個HINSTANCE是一個非常不同的句柄,一個內核句柄,它肯定是引擎蓋下的64位值。等於模塊內存中的基址,所以他們被迫添加這個屬性。

+0

還有一些幫助功能列在[這裏](https://www.viva64.com/en/k/0005/)可用於轉換句柄。 –