将窗口转换为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