2

MSDN 上的这个页面似乎列出了一堆文件操作,它们的行为或多或少与本示例中使用的三个函数的压缩版本完全相同。这些在 Win32 API 中编写的非标准运行时函数的目的是什么?

它们只是为了与 DOS 兼容吗?如果是这样,那么为什么他们要更新 64 位支持之类的东西呢?

4

4 回答 4

3

如果您有从 16 位 Windows 导入的名为 _findfirst 和 _findnext 的代码,则可以继续使用它们。否则使用 API。

如果您查看 C 运行时源代码(包含在 VC++ 中),您会看到 _findfirst 调用 FindFirstFile,依此类推。

来源

请查看此站点上的图表以及性能比较。Win32 API FindFirstFile 变体更有效。警告:该网站本身不是英文的,但图表是有道理的。

于 2009-03-15T15:00:36.717 回答
3

可能您使用原始 Win32 API 克服的关键问题(也许是唯一的事情)是,在调试版本中,CRT 将为您执行一些验证(查看源代码 - 那里抛出了很多验证断言)。

封装一个 OS API 有什么问题——即使只是非常轻微?

于 2009-03-15T15:39:54.597 回答
2

C 运行时函数还将执行诸如 set errno on failure 之类的操作,这是与 Win32 不同的错误机制。

代码也存在于单独的 DLL 中,有一次人们实际上试图编写不使用 CRT 的程序,因为他们不想加载另一个 DLL。

于 2009-03-15T15:41:16.917 回答
1

它被称为“历史”——当你制作像 Windows 这样的东西时,你不能丢弃旧功能,因为它会破坏现有程序。

其中一组看起来像“C”函数,一组看起来像“Win32”函数。您可以使用您最喜欢的任何一个。

于 2009-03-15T14:46:50.230 回答