我发现有关MSVC的 _doserrno
全局变量的文档非常“稀疏&#34”,可以这么说。它的存在在 errno
的文档中提到,它是错误代码的标准C全局变量。同时 _doserrno
似乎是MSVC扩展程序。该文档提到可能提供有关I / O错误的其他信息,但它也说大多数函数不设置它。
但做的功能是什么?似乎没有这个列表,或者我错过了什么?在单个函数的文档中,我也不看到任何提及,如"此函数[not]设置_doserrno
"。那我怎么知道一个函数是否设置了它?非常困惑,不是吗?
此外,文档没有说明如何解释 _doserrno
的值。从我自己的测试中可以看出,它只是从Win32 API传递到C API的Win32错误代码。但情况总是这样吗?以及如何将_doserrno
转换为字符串?
(我知道我可以直接从Win32 API使用FormatMessage()
从Win32错误代码中获取字符串。但是恢复到Win32 API完全违背了在C API中使用_doserrno
的假设!)
的问候,
MULDER
答案 0 :(得分:0)
我认为做你想做的事是不可能的。
如果你想坚持IO的可移植C函数,你将无法得到合理的错误代码或消息:C和C ++标准库都没有公开这些东西。
如果您想在Windows上获得良好的错误消息,则必须使用Win32 API而不是便携式C函数。顺便说一句,上面有好的OO包装,例如,请参阅CAtlFile了解文件。