CopyFileEx 与对 GetLastError 的以下调用返回 ERROR_INVALID_PARAMETER 即使从大约 2 个月前(可能从 2015 年 12 月开始)在 Win2012R2 上复制成功。在 Windows XP 到 Windows 7 和 Win 2k3 到 Win2k8R2 上,这不会发生,GetLastError 总是返回 0 (ERROR_SUCCESS)。
这是这种 Win32 API 的预期行为吗?您是否必须同时添加结果和 GetLastError 代码以确保结果?
此 KB 似乎与问题有关,但应用此补丁不会改变 API 行为。可能有另一个 KB 导致问题出现,但我一直无法找到它 https://support.microsoft.com/en-us/kb/2963918
GetLastError 的文档:
返回值
返回值是调用线程的最后一个错误代码。
设置最后一个错误代码的每个函数的文档的返回值部分记录了函数设置最后一个错误代码的条件。大多数设置线程最后错误代码的函数在失败时都会设置它。但是,某些函数在成功时也会设置最后一个错误代码。如果该函数没有记录设置最后一个错误代码,则该函数返回的值只是最近设置的最后一个错误代码; 一些函数在成功时将最后一个错误代码设置为 0,而其他函数则没有。