【发布时间】:2016-01-10 16:52:13
【问题描述】:
LoadLibrary 的 MSDN 文档警告不要使用普通的 Unix 斜杠“/”:
指定路径时,请务必使用反斜杠 (\),而不是正斜杠 (/)。
在调用此 API 时,使用正斜杠或反斜杠(或两者)都没有发现任何问题。我尝试了以下路径名:
c:/foo/bar/baz.dll
/foo/bar/baz.dll
c:/foo/bar\\baz.dll
/foo/bar\\baz.dll
./bar/baz.dll
所有组合都按预期工作。为什么 MSDN 建议不要使用正斜杠作为路径分隔符?
编辑:
关于 UNC 名称,它也可以与“//127.0.0.1/c$/foo/bar/baz.dll”完美配合。
是的,如果您添加“\?\”,它不会加载库,但 _wfopen 也将无法打开文件。 LoadLibraryW 与任何其他接受/不接受正斜杠的 Windows API 有何不同?为什么有关于 LoadLibraryW 而不是 CreateFileW 的明确警告。
创建文件:https://msdn.microsoft.com/en-us/library/windows/desktop/aa363858(v=vs.85).aspx
要创建或打开的文件或设备的名称。您可以在此名称中使用正斜杠 (/) 或反斜杠 ()。
加载库:https://msdn.microsoft.com/en-us/library/windows/desktop/ms684175(v=vs.85).aspx
指定路径时,请务必使用反斜杠 (),而不是正斜杠 (/)。
在使用正斜杠 (/) 时,是否存在其他可能导致 LoadLibrary 失败的缺陷,而其他 Windows API 可以毫无问题地接受正斜杠?
【问题讨论】:
-
您使用的是普通的 Windows API 路径名。一旦您有意或偶然地开始使用 NT 风格的名称(通过添加“\\?\”前缀),将不再有任何路径分隔符的翻译。 Naming Files, Paths, and Namespaces 拥有您需要的所有信息。本质上:始终使用本机路径分隔符。
-
你是不是不小心删了一半的问题?我不明白问题是什么;听起来你没有任何问题??
-
它被弄乱了太多,例如任何反恶意软件修补它。您只是违反了保修条款,如果您致电 Microsoft 支持,他们发现您使用了正斜杠,然后他们就会挂断电话。
-
您仅引用了
CreateFile文档的一部分。以下是相关的剩余部分:"[...] 在路径前添加 "\\?\"。有关详细信息,请参阅 Naming Files, Paths, and Namespaces。" 最后一个链接将您带到以下内容:“Windows API 中的文件 I/O 函数将“/”转换为“\”作为将名称转换为 NT 样式名称的一部分,使用“\\?\”前缀时除外。”没有 Windows API 调用将转换以“\\?\”为前缀的路径名。唯一的区别:LoadLibrary附带更准确的文档。
标签: winapi dll posix loadlibrary