將窗口轉換爲CreateFile返回類型(「HANDLE」)是否安全或正確?反之亦然,即HANDLE類型的long值是多少? 如果方法是正確的,那麼在Windows 7環境中如何實現? 32位處理將很好,但任何處理64位版本的便攜式代碼都可以成爲最佳選擇。Safeway在C++中將Windows CreateFile句柄轉換爲'long',反之亦然
回答
HANDLE
可能是實現爲一個不透明的指針,所以鑄造/從uintptr_t
不應給你的問題。 但它並不安全。沒有將實現定義的數據類型轉換爲整數是安全的,並且從指針到整數的任何轉換都是安全的。
指針應該保持指針。
不應該轉換實現定義的類型。
整數應保持整數。
嗨,謝謝你的回覆..你能否告訴我一些光芒,鑄造的副作用是什麼?以及它如何使應用程序容易出錯。對不起,我缺乏關於此主題的知識 – Lo1234 2015-04-01 08:20:08
如果將一個指針指向一個整數,那麼您將失去有關它作爲指針的任何知識。如果將其修改爲整數,然後將其轉換回來,則會發生任何不良情況。此外,你鬆散了關於它是哪種類型的指針的信息,然後,如果將它轉換爲錯誤的指針類型,那麼不僅可能有錯誤結果的風險,還會破壞嚴格別名,使編譯器可能使用的一些技巧失效。 – lodo 2015-04-01 08:22:57
@ Lo1234同樣適用於實現定義的類型。 – lodo 2015-04-01 08:32:50
沒有辦法將HANDLE
正確投射到long
後面。
考慮到在64位Windows上,long
是32位長,而HANDLE
是64位長。
- 1. 將ansi轉換爲utf8,反之亦然
- 2. 將float2轉換爲double2,反之亦然
- 3. 將lonlat轉換爲xyz,反之亦然
- 4. 將NSString轉換爲NSData,反之亦然
- 5. 將HTML轉換爲Xliff,反之亦然
- 6. 將JavaUtilDate轉換爲NSDate,反之亦然?
- 7. 將RSAPrivateKey轉換爲PrivateKey,反之亦然
- 8. 從unsigned long int轉換爲signed int,反之亦然
- 9. 在C中將全角字符轉換爲hankaku,反之亦然#
- 10. 在c#中將Uint64轉換爲5字節,反之亦然#
- 11. 在C中將UNICODE_STRING轉換爲ANSI或反之亦然
- 12. 在C#中將像素轉換爲英寸,反之亦然#
- 13. C#在Windows Store應用中將BitmapImage轉換爲Byte [],反之亦然
- 14. 將字符串轉換爲數字,反之亦然C(NOT C++)
- 15. DTO轉換爲實體,反之亦然
- 16. 將列轉換成行,反之亦然
- 17. C++ OpenCV:將mat轉換爲base64,反之亦然
- 18. C#將PDF文件轉換爲Word文檔,反之亦然
- 19. 我怎樣才能將Xml轉換爲Json,反之亦然c#
- 20. C++ |將int轉換爲byte [4],反之亦然
- 21. OpenCV將RGB轉換爲YCbCr,反之亦然手動(Visual C++)
- 22. 將數組數組轉換爲字節,反之亦然C#
- 23. 在Python中將base 6轉換爲decimal,反之亦然?
- 24. 在golang中將[] uint32轉換爲[]字節,反之亦然
- 25. 如何在Qt中將QVariant轉換爲QString,反之亦然?
- 26. 如何在Python中將RGB轉換爲CMYK,反之亦然?
- 27. 如何在Java中將POJO轉換爲Map,反之亦然?
- 28. integer在Python中被提升爲long,反之亦然。爲什麼?
- 29. 將對象轉換爲AS3中的XML元素(反之亦然)
- 30. 將CGRect轉換爲數組中的NSValue,反之亦然
不,沒有辦法可以正確地將一個HANDLE投入長時間後面。 – immibis 2015-04-01 08:04:32
'HANDLE'可能是作爲一個不透明的指針實現的,因此將其轉換爲/從'uintptr_t' **不應該給你帶來問題。但它並不安全。 – lodo 2015-04-01 08:07:47