WinAPI中的HANDLE和HFILE有什么区别?

时间:2008-11-26 14:33:43

标签: winapi file

WinAPI OpenFile函数返回HFILE,而GetFileTime例如需要HANDLE。当我用(HANDLE)some_hFile喂它时似乎工作正常。这种类型有什么不同,或者其中一种只是简陋的?

5 个答案:

答案 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不完全相同,如果它们的定义不同,可以说是HFILEHWND,那么也许开发人员不会意外地交换它们。 (但它们typedefint编辑。

后来,有人意识到,如果他们完全被定义为...那么说:

typedef struct _hfile {} * HFILE;
typedef struct _hwnd {} * HWND;

然后编译器本身会抱怨如果你用一个代替另一个,即使实际上每个只是一个普通的旧16位(最终32位)int值。

答案 4 :(得分:1)

如果成功,OpenFile将返回文件句柄;如果失败则返回HFILE_ERROR。

相关问题