WinAPI OpenFile函数返回HFILE,而GetFileTime例如需要HANDLE。当我用(HANDLE)some_hFile喂它时似乎工作正常。这种类型有什么不同,或者其中一种只是简陋的?
答案 0 :(得分:8)
OpenFile是一个16位Windows向后兼容功能。 CreateFile是打开文件的功能。
答案 1 :(得分:6)
如果函数成功,则HFILE是文件HANDLE。如果不是,则它是HFILE_ERROR常数(可能是-1)。关键是它不能是错误的HANDLE,因此它们返回的内容可以是HANDLE或错误值。
请参阅@ Barry的建议。
答案 2 :(得分:3)
要回答您的问题,HANDLE只是一个无符号的32位数字,定义为PVOID。这是一个通用的句柄。 HFILE是一个专门的句柄,虽然定义为有符号的32位数,但能够获得值-1 还有其他专门的句柄,如HACCEL,HBITMAP,HINSTANCE等,都被定义为对HANDLE的依赖。
答案 3 :(得分:2)
多年前,HANDLES
是16位int
。 Windows中的所有句柄都是HANDLES
。然后有人意识到文件HANDLE
与窗口HANDLE
不完全相同,如果它们的定义不同,可以说是HFILE
和HWND
,那么也许开发人员不会意外地交换它们。 (但它们typedef
被int
编辑。
后来,有人意识到,如果他们完全被定义为...那么说:
typedef struct _hfile {} * HFILE;
typedef struct _hwnd {} * HWND;
然后编译器本身会抱怨如果你用一个代替另一个,即使实际上每个只是一个普通的旧16位(最终32位)int
值。
答案 4 :(得分:1)
如果成功,OpenFile将返回文件句柄;如果失败则返回HFILE_ERROR。