簡體   English   中英

如何在Win x64中的32位和64位應用程序之間共享HWND?

[英]How can I share HWND between 32 and 64 bit applications in Win x64?

MSDN告訴我,在進程間通信 (MSDN)中,32位和64位應用程序之間可以共享窗口句柄(HWND)。 但是,在Win32中,HWND是32位,而在64位Windows中,它是64位。 那么如何共享句柄呢?

我想同樣的問題適用於命名對象的句柄,如互斥鎖,信號量和文件句柄。

正如Daniel Rose在上面指出的那樣, MSDN文檔現在指出:

...截斷句柄(將其從64位傳遞到32位)或對句柄進行符號擴展(將其從32位傳遞到64位)是安全的。

這里似乎仍有一些混亂,因為我被告知零擴展是WOW64開發的正確方法。 如果您正在編寫一個64位模塊,從32位模塊獲取句柄,最安全的選擇可能是僅比較句柄的低32位(即截斷)。 否則,您可能會遇到符號擴展與零擴展差異。

我剛收到一封來自Microsoft WOW64開發人員的電子郵件,他確認:

手柄為32位,可以安全截斷/零延伸。 對於內核對象句柄和USER / GDI句柄都是如此。

它們可以共享的事實是否意味着在Win64進程中只使用低32位? Windows句柄是索引而不是指針,至少據我所知,所以除非MS想要允許超過2 ^ 32窗口/文件/互斥/等。 處理沒有理由在Win64上使用void*的高32位。

請參閱Microsoft接口定義語言(MIDL)移植指南,第12頁(http://msdn.microsoft.com/en-us/library/ms810720.aspx)

這里看看ar USER和GDI句柄是符號擴展的32b值

我認為你一般都要小心謹慎。 但是,MSDN聲稱它們可以共享是我們程序員的合同。 在沒有破壞大量軟件的情況下,他們不能說“今天分享”然后明天“不再”。

同樣,對於x64和32位軟件在給定計算機上並發運行,並且每個人都可以相處,HWND(和許多HANDLE)必須繼續保持32位且兼容。

我想我所說的是我認為這是一個非常安全的賭注,至少在Windows 7的生命周期中,可能是Windows“下一個”。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM