2015-04-01 23 views
0

將窗口轉換爲CreateFile返回類型(「HANDLE」)是否安全或正確?反之亦然,即HANDLE類型的long值是多少? 如果方法是正確的,那麼在Windows 7環境中如何實現? 32位處理將很好​​,但任何處理64位版本的便攜式代碼都可以成爲最佳選擇。Safeway在C++中將Windows CreateFile句柄轉換爲'long',反之亦然

+0

不,沒有辦法可以正確地將一個HANDLE投入長時間後面。 – immibis 2015-04-01 08:04:32

+0

'HANDLE'可能是作爲一個不透明的指針實現的,因此將其轉換爲/從'uintptr_t' **不應該給你帶來問題。但它並不安全。 – lodo 2015-04-01 08:07:47

回答

1

HANDLE可能是實現爲一個不透明的指針,所以鑄造/從uintptr_t不應給你的問題。 但它並不安全。沒有將實現定義的數據類型轉換爲整數是安全的,並且從指針到整數的任何轉換都是安全的。

指針應該保持指針。

不應該轉換實現定義的類型。

整數應保持整數。

+0

嗨,謝謝你的回覆..你能否告訴我一些光芒,鑄造的副作用是什麼?以及它如何使應用程序容易出錯。對不起,我缺乏關於此主題的知識 – Lo1234 2015-04-01 08:20:08

+1

如果將一個指針指向一個整數,那麼您將失去有關它作爲指針的任何知識。如果將其修改爲整數,然後將其轉換回來,則會發生任何不良情況。此外,你鬆散了關於它是哪種類型的指針的信息,然後,如果將它轉換爲錯誤的指針類型,那麼不僅可能有錯誤結果的風險,還會破壞嚴格別名,使編譯器可能使用的一些技巧失效。 – lodo 2015-04-01 08:22:57

+0

@ Lo1234同樣適用於實現定義的類型。 – lodo 2015-04-01 08:32:50

0

沒有辦法將HANDLE正確投射到long後面。

考慮到在64位Windows上,long是32位長,而HANDLE是64位長。

+0

我實際上需要將此句柄傳遞給32位應用程序......它具有32位長數據類型.. – Lo1234 2015-04-01 08:11:06

+0

@ Lo1234將句柄傳遞給另一個應用程序有什麼意義? – immibis 2015-04-01 08:11:30

+0

其實我正在創建一個dll並向第三方應用程序提供API ... OpenFile和Close File是由該應用程序完成的,所以我認爲通過處理它會更容易。 – Lo1234 2015-04-01 08:17:37

相關問題