2015-04-01 26 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

相关问题