它可能会起作用,但并不好(尽管这似乎是 Microsoft 所期望的;见下文)。
首先,你的术语有点不对劲。强制转换是一个运算符,由括号中的类型名称组成。它指定了显式转换。没有隐式转换或“自动转换”之类的东西。你所说的“强制施法”仅仅是施法;你所说的“自动转换”是一种隐式转换。
HFILE
只是int
. 根据Microsoft 的文档,HANDLE
是void*
. 该语言没有定义从任何指针类型到int
. 在这种情况下,您的编译器会让您侥幸逃脱并发出警告。实际上,分配是违反约束的,需要诊断消息。您的编译器可能(而且恕我直言应该)简单地拒绝您的程序并显示致命错误消息。
如果你有一个指针值,你应该把它赋给一个相同类型的指针变量。
如果你想给 赋值HANDLE
,stat_fh
那么你应该声明stat_fh
为 a HANDLE
,而不是 an int
(甚至声明为 an HFILE
,正如我所说的,这只是 的另一个名称int
)。
为什么定义HFILE
为 的别名int
?
更新 :
我看到微软HFILE
实际上将其定义为:
typedef int HFILE;
他们的文档还说这是“由OpenFileHFILE
打开的文件的句柄,而不是CreateFile ”。如果您点击这些链接,您会发现不推荐这样做。OpenFile
另一方面,文档OpenFile
说由OpenFile
(返回一个HFILE
,即一个int
)打开的文件应该通过将句柄传递给关闭,该句柄CloseHandle
接受一个HANDLE
(即,void*
)参数。
这太骇人听闻了,我猜这是微软决定不鼓励使用OpenFile
.
据我所知(虽然我不是 Windows 程序员,所以我可能会遗漏一些东西),没有充分的理由使用HFILE
.